在 SWT 中将 selectListener 添加到 table

Add selectListener to table in SWT

在 SWT 中,我想显示一个包含 4 列的 Table:第一列是数字,第二列是字符串,第三列是复选框,第四列是单选按钮。 设置完所有行后,我想为第 3 列(检查 all/none)和第 4 列(选择干净的无线电)添加另一行。

这是代码(可以编译,但我还没有测试过):

//Create table 
Table table = new Table(layoutComposite, SWT.BORDER); 
table.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL));

String[] tableItems = new String[] {"", "Player", "Show", "Highlight"};
int[]  tableSizes = new int[] {30, 150, 20, 20}; 

// Header Columns and sizes for table 
for (int i = 0; i < tableItems.length; i++) { 
    TableColumn tableColumn = new TableColumn(table, SWT.NONE);
    tableColumn.setText(tableItems[i]);
    tableColumn.setWidth(tableSizes[i]);
}
table.setHeaderVisible(true);
table.setLinesVisible(false);

// Create items (void)  
for (int i = 0; i < positions.size(); i++) {
    new TableItem(table, SWT.NONE);
}

TableItem[] items = table.getItems();

// Check and Radio Buttons 
Button[] checks = new Button[items.length + 1];
Button[] radios = new Button[items.length + 1];

// Add elements 
for (int i = 0; i < items.length + 1; i++) {
    // Pos and Player only in first items.length rows  
    if (i < items.length) {
        items[i].setText(0, String.valueOf(positions.get(i).getPos()));
        items[i].setText(1, positions.get(i).getPlayer().getPlayerName());
    }
    TableEditor editorCheck = new TableEditor(table); 
    checks[i] = new Button(table, SWT.CHECK);
    checks[i].pack();
    checks[i].setSelection(true); 
    editorCheck.minimumWidth = checks[i].getSize().x; 
    editorCheck.setEditor(checks[i], items[i], 2);

    TableEditor radioCheck = new TableEditor(table); 
    radios[i] = new Button(table, SWT.RADIO);
    radios[i].pack();
    radios[i].setSelection(false);
    radioCheck.minimumWidth = radios[i].getSize().x; 
    radioCheck.setEditor(radios[i], items[i], 3);
}

table.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent e) {
        if (e.detail == SWT.CHECK) { 
            if (e.item instanceof Button) { 

                // TODO: 
                //   Get checked item selected 
                //   If last row (ie: == checks[items.length]), select or unselect all check related buttons 
                // 

                //((Button)e.item).get  //  Problem here!!!! 
            }
        }
        else if (e.detail == SWT.RADIO) { 
                // TODO: 
                //   Get radio selected 
                //   If last row (ie: radios[items.length]), clean selected item (if any)

        }


        // TODO Auto-generated method stub
        super.widgetSelected(e);
    }
});

现在我需要在检查和单选按钮上添加一个侦听器。我的问题是:我怎么知道选中了哪个复选按钮或单选按钮? 我应该这样做吗?

for (int i = 0; i < checks.length; i++) { 
    if (e.item == checks[i]) { // found selected 
        if (i == checks.length -1 ) { // last one 
            // Select or unselect all
        }
        // doStuff () ; 
    }
}

如果这是正确的,有没有一种简单的方法可以知道选择了哪个?如果没有,我该怎么做?

非常欢迎任何其他提示。

您可以在创建每个复选框和单选按钮后为其添加一个选择侦听器:

    checks[i].addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent event) {
         // your code here...

         // get the current checkbox/radio button from the event:
         Widget src = event.widget;
         // ...
      }
    });

对单选按钮做同样的事情:

    radios[i].addSelectionListener(...);

希望对您有所帮助。享受。