我有一个运行方法的按钮。该方法获取表中选定的行并将它们添加到数组列表中。这在第一次执行时效果很好。但是如果用户选择了错误的行,他们将能够重新选择不同的行并将该选择数据添加到 arraylist。
但是使用我当前的代码,用户第二次选择哪一行并不重要,第一次选择的数据总是被添加到数组列表中。就像在用户选择新行之前需要重置或刷新选择一样。
按钮代码
Button pdfButton = new Button(composite, SWT.PUSH);
pdfButton.setText("Get Plotter List");
pdfButton.setEnabled(true);
pdfButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
getPlotterSelection();
}
});
方法代码
public void getPlotterSelection() {
selectedPlotters.clear(); <-- Clearing the ArrayList
int[] row = viewer.getTable().getSelectionIndices(); <-- Getting Current Selections
Arrays.sort(row);
if (row.length > 0) {
for(int i = row.length-1; i >= 0; i--){
PrinterProfile pp = new PrinterProfile(aa.get(i).getPrinterName(), aa.get(i).getProfileName());
selectedPlotters.add(pp);
}
}
viewer.getTable().deselectAll();
}
在我写这篇文章时,我认为问题可能出在 getSelectionIndices() 中。似乎获得了选择的行数,但不是实际的行数
编辑
问题出在我的逻辑上。我得到了正确的索引,但是在 for 循环中使用 i 变量来获取值。
for(int i = row.length-1; i >= 0; i--){
PrinterProfile pp = new PrinterProfile(aa.get(i).getPrinterName(), aa.get(i).getProfileName());
将其更改为
aa.get(row[i].getPrinterName(), etc...
它就像我想的那样工作