JButton动作不在JTable中执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JButton动作不在JTable中执行相关的知识,希望对你有一定的参考价值。

我有一个简单的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实现,但控制台上没有任何内容

答案

渲染器仅显示单元格中的数据。您不能将ActionListener添加到按钮,因为它不是真正的组件。渲染器仅绘制表格中按钮的图像。

如果您希望能够单击按钮,则需要创建自定义编辑器。

请参阅Table Button Column以获取为您执行此操作的编辑器实现。

以上是关于JButton动作不在JTable中执行的主要内容,如果未能解决你的问题,请参考以下文章

在另一个 JFrame 中使用 JButton 刷新 JTable?

单击 JButton 时不会填充 JTable

使用 JButton 更新 JTable

myeclipse中拖拽了一个jTable 当点击jButton时在jTable中显示数据库中的信息

单击JButton时如何删除JTable中的当前行?

需要有关 JTable 的帮助吗?