1

我有一个运行方法的按钮。该方法获取表中选定的行并将它们添加到数组列表中。这在第一次执行时效果很好。但是如果用户选择了错误的行,他们将能够重新选择不同的行并将该选择数据添加到 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...

它就像我想的那样工作

4

1 回答 1

1

既然您已经在使用 a TableViewer,为什么不从中获得选择呢?

IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
YourObject[] array = (YourObject[])selection.toArray();

然后你可以遍历数组并将它们添加到你的ArrayList.

于 2012-09-17T18:39:56.730 回答