单击单元格时如何更改表格中单元格的内容

时间:2018-09-20 18:46:02

标签: java eclipse swt windowbuilder

我在Java SWT上有一张表。我有一个“已付款”列,所有项目均写有“未付款”和一个图标“未付款”。这是表格的第四列。

我已在表中填充了虚拟内容,现在,我想在“已付费”第四列的单元格上添加一个侦听器,以更改单击的单元格的内容。如果该单元格具有非付费文字和图标,则必须更改为付费文字和图标,并且行为相反。

我找不到实现此目的的方法,因为我无法将选择侦听器添加到表的单元格中,或者我不知道该怎么做。

这是我的源代码:

Table membersTable = new Table(clubComposite, SWT.BORDER | SWT.CHECK | SWT.FULL_SELECTION);
membersTable.setLinesVisible(true);
membersTable.setHeaderVisible(true);
membersTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

TableColumn tblclmnName = new TableColumn(membersTable, SWT.NONE);
tblclmnName.setWidth(150);
tblclmnName.setText("Nombre");

TableColumn tblclmnCommonPhoneNumber = new TableColumn(membersTable, SWT.NONE);
tblclmnCommonPhoneNumber.setWidth(120);
tblclmnCommonPhoneNumber.setText("Teléfono");

TableColumn tblclmnCommonMoney = new TableColumn(membersTable, SWT.NONE);
tblclmnCommonMoney.setWidth(150);
tblclmnCommonMoney.setText("Participación Habitual");

TableColumn tblclmnPayed = new TableColumn(membersTable, SWT.CENTER);
tblclmnPayed.setWidth(50);
tblclmnPayed.setText("Payed"); 

// populate Table
for (int i=0; i<50; i++) {
    TableItem tableItem = new TableItem(membersTable, SWT.CENTER);                  
    tableItem.setText(new String[] {"person "+i, "610610620", "100", "non payed"});
    tableItem.setImage(3, uncheckedImage);
}

编辑:

好的,我设法使用了复选框,但是现在我如何知道在复选框的哪一行单击了?我需要它来获取第三列的值

// populate Table
    for (int i=0; i<50; i++) {
        TableItem tableItem = new TableItem(membersTable, SWT.NONE);                    
        tableItem.setText(new String[] {"person "+i, "610610620", "100"});

        Button button = new Button(membersTable, SWT.CHECK);
        button.pack();
        TableEditor editor = new TableEditor(membersTable);
        editor.minimumWidth = button.getSize().x;
        editor.horizontalAlignment = SWT.CENTER;
        editor.setEditor(button, tableItem, 3);

        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                //how to know in which row is clicked the checkbox?
            }
        });
    }

1 个答案:

答案 0 :(得分:2)

由于您位于创建for的{​​{1}}循环中,因此您已经具有该行的索引。同样,如果您需要实际的TableItem,那么您也已经可以使用它。

TableItem

编辑: 如评论中所述,如果删除一行,则使用for (int i=0; i<50; i++) { TableItem tableItem = new TableItem(membersTable, SWT.NONE); tableItem.setText(new String[] {"person "+i, "610610620", "100"}); Button button = new Button(membersTable, SWT.CHECK); button.pack(); TableEditor editor = new TableEditor(membersTable); editor.minimumWidth = button.getSize().x; editor.horizontalAlignment = SWT.CENTER; editor.setEditor(button, tableItem, 3); final int index = i; // Hold the row index here button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { //how to know in which row is clicked the checkbox? System.out.println("Row selected: " + index); System.out.println("Participación Habitual: " + tableItem.getText(2)); } }); } 将是不可靠的。相反,如果需要数字索引,可以使用Table.indexOf(TableItem)

index