Действие JButton не выполняется внутри JTable - PullRequest
0 голосов
/ 31 августа 2018

У меня есть простая таблица JTable, одной из ее ячеек является кнопка Edit, которая должна открыть новую JDialog.

После нескольких примеров из Интернета я создал новый класс, который реализует TableCellRenderer и возвратил из него JButton, но по какой-то причине кнопка не выполняет то, что мне нужно.

Это мой код:

final MessageResourcesTableModel model = new MessageResourcesTableModel(columnNames);

JTable resultsTable = new JTable(model);
resultsTable.setShowGrid(true);
resultsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
resultsTable.setPreferredScrollableViewportSize(resultsTable.getPreferredSize());
resultsTable.setFillsViewportHeight(true);
resultsTable.setFont(font13);

final TableCellRenderer buttonRenderer = new JTableButtonRenderer();
resultsTable.getColumn(COLUMN_EDIT).setCellRenderer(buttonRenderer);

И это рендер:

class JTableButtonRenderer implements TableCellRenderer {
    @Override public Component getTableCellRendererComponent(final JTable table, final Object value, final boolean isSelected, final boolean hasFocus, final int row, final int column) {
        final JButton editButton = new JButton("Edit");
        editButton.setOpaque(true);

        editButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent e) {
                System.out.println("Hi from Action !!!");

            }
        });
        return editButton;
    }
}

Несмотря на простую реализацию ActionListener, в консоли нет ничего

1 Ответ

0 голосов
/ 31 августа 2018

Средство визуализации отображает только данные в ячейке. Вы не можете добавить ActionListener к кнопке, потому что это не настоящий компонент. Рендерер только рисует изображение кнопки в таблице.

Вам нужно создать собственный редактор, если вы хотите иметь возможность нажимать на кнопку.

См. Столбец Столбец столбец для реализации редактора, которая делает это для вас.

...