我有一个运行方法的按钮。该方法获取表中的选定行并将它们添加到arraylist。这在第一次执行时效果很好。但是如果用户选择了错误的行,他们将能够重新选择不同的行并将该选择数据添加到arraylist。
但是使用我当前的代码,第二次将第一个选定数据添加到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...
它的工作方式就像我认为的那样
答案 0 :(得分:1)
由于您已经在使用TableViewer
,为什么不从中获取选择?
IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
YourObject[] array = (YourObject[])selection.toArray();
然后,您可以遍历数组并将其添加到ArrayList
。