SWT - TableViewer - 刷新选择

时间:2012-09-17 18:24:31

标签: swt tableviewer

我有一个运行方法的按钮。该方法获取表中的选定行并将它们添加到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...

它的工作方式就像我认为的那样

1 个答案:

答案 0 :(得分:1)

由于您已经在使用TableViewer,为什么不从中获取选择?

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

然后,您可以遍历数组并将其添加到ArrayList