繁体   English   中英

在JTable内部不执行JButton操作

[英]JButton action is not performed inside of 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添加到按钮,因为它不是真正的组件。 渲染器仅在表中绘制按钮的图像。

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

请参阅表格按钮列以获取可为您完成此操作的编辑器实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM