java - 将 JButton 添加到 JTable 单元格

标签 java swing jtable jbutton

我有一个 JTable,其模型创建如下:

DefaultTableModel model = new DefaultTableModel(new Object[][] {},new String[] {"Col1", "Col2", "Col3", "Col4", "Col5", "Col6", "Col7", "Col8"}) {
@Override
public Class<?> getColumnClass(int column) {
switch (column) {
case 0: return ImageIcon.class;
case 7: return JButton.class;
default: return String.class;
}
}
};
table = new JTable(model);

但是当我使用addRow方法时,我的ImageIcon显示正确,但JButton显示不正确。事实上,我得到了类似 javax.Swing.JButt... 的东西,而不是 JButton!

最佳答案

当您添加新行时,它会被正确填充。 (您可以看到ImageIcon)。 因此,JButton 对象也已正确插入。

这里唯一的区别是,JTable 不知道如何显示它或处理它的事件。

这就是为什么 JTableJButton 上调用 toString() 方法并显示文本(如您所提到的)。

javax.swing.JButt......

<小时/>

为了解决这个问题,我们需要向 JTable 提供两个额外的对象。

  1. TableCellEditor处理事件。
  2. TableCellRenderer处理绘画。
<小时/>

您可以在此处找到有关实现细节的其他信息:How to use custom JTable cell editor and cell renderer

希望这有帮助。
祝你好运。

<小时/>

编辑以回复评论。

table.getColumnModel().getColumn(7).setCellRenderer(new MyCellRenderer());
// Put painting logic in MyCellRenderer class.

这样您就可以将不同的渲染器对象分配给不同的列。

关于java - 将 JButton 添加到 JTable 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23563827/

相关文章:

java - JTable 中的 JProgressBar 未更新

java - 如何刷新 JTable 中的数据 我正在使用 TableModel

java - 是否可以从 servlet 或过滤器启动对话

java - 您可以动态创建对 JCheckBox 对象的引用吗?

Java scrollToReference 导致 JEditorPane 出现异常

java - JTable - 列中每个单元格的不同组合框

java - java中如何比较两个日期?

java - Java文件读取

java - 在Java中将多个电话号码存储在单个数组中

java - 重叠 AWT 行和 Swing JLabel