roeygol
roeygol

Reputation: 5028

JButton action is not performed inside of JTable

I got a simple JTable which one of it's cells is an Edit button which needs to open a new JDialog.

After a several examples from the web I created a new class which implements TableCellRenderer and returned a JButton from it but the button is not doing what I need for some reason.

This is my code:

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);

And this is the renderer:

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;
    }
}

Although there is a simple ActionListener implementation, there is nothing over the console

Upvotes: 0

Views: 34

Answers (1)

camickr
camickr

Reputation: 324118

A renderer only displays the data in the cell. You can't add an ActionListener to the button because it is not a real component. A renderer only paints an image of the button in the table.

You need to create a custom editor if you want to be able to click on the button.

See Table Button Column for an editor implementation that does this for you.

Upvotes: 1

Related Questions