【问题标题】:JButton action is not performed inside of JTableJButton 动作不在 JTable 内部执行
【发布时间】:2018-08-31 14:43:27
【问题描述】:

我有一个简单的 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 实现,但控制台上什么都没有

【问题讨论】:

标签: java swing jtable renderer


【解决方案1】:

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

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
相关资源
最近更新 更多