Как изменить содержимое ячейки в таблице при нажатии на эту ячейку - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть таблица на 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 голосов
/ 20 сентября 2018

Поскольку вы находитесь внутри for -цикла, создающего 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));
        }
    });
}

Редактировать: Как упомянуто в комментариях, используя indexбудет ненадежным, если строка будет удалена.Вместо этого вы можете использовать Table.indexOf(TableItem), если вам нужен числовой индекс.

@Override
public void widgetSelected(SelectionEvent e) {
    //how to know in which row is clicked the checkbox?
    System.out.println("Row selected: " + membersTable.indexOf(tableItem));
    System.out.println("Participación Habitual: " + tableItem.getText(2));
}
...