【问题标题】:Add a JButton to a JTable cell将 JButton 添加到 JTable 单元格
【发布时间】:2014-06-27 03:32:06
【问题描述】:

我有一个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

【问题讨论】:

    标签: java swing jtable jbutton


    【解决方案1】:

    当您添加新行时,它会被正确填充。 (你可以看到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.
    

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

    【讨论】:

    • 好的,我现在明白问题所在了。但我想知道如何让 JTable 知道在特定列中我想要 JButton 对象?
    【解决方案2】:

    问题是JTable 不支持按钮渲染器或编辑器。您可以使用自定义单元格编辑器来克服它,ButtonColumnhttp://tips4java.wordpress.com/2009/07/12/table-button-column/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 2014-03-08
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 2014-09-24
      • 2013-05-27
      • 2012-07-25
      相关资源
      最近更新 更多