我得到了一个简单的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实现,但控制台上没有任何内容
答案 0 :(得分:1)
渲染器仅在单元格中显示数据。您不能将ActionListener添加到按钮,因为它不是真正的组件。渲染器仅在表中绘制按钮的图像。
如果要单击按钮,则需要创建一个自定义编辑器。
请参见Table Button Column,了解可为您完成此操作的编辑器实现。