Java 将JButton添加到JTable单元格

Java 将JButton添加到JTable单元格,java,swing,jtable,jbutton,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:

我有一个
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);
DefaultTableModel=new DefaultTableModel(新对象[][]{},新字符串[]{“Col1”、“Col2”、“Col3”、“Col4”、“Col5”、“Col6”、“Col7”、“Col8”}){
@凌驾
公共类getColumnClass(int列){
开关(列){
案例0:返回ImageIcon.class;
案例7:返回JButton.class;
默认值:返回String.class;
}
}
};
表=新JTable(型号);

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

问题在于
JTable
不支持按钮渲染器或编辑器。您可以使用自定义单元格编辑器来克服它:

问题是
JTable
不支持按钮渲染器或编辑器。您可以使用自定义单元格编辑器来克服它:

问题是
JTable
不支持按钮渲染器或编辑器。您可以使用自定义单元格编辑器来克服它:

问题是
JTable
不支持按钮渲染器或编辑器。您可以使用自定义单元格编辑器克服此问题:

添加新行时,将正确填充新行。(您可以看到
图像图标
)。 因此,
JButton
对象也被正确插入

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

这就是为什么
JTable
JButton
上调用
toString()
方法并显示文本(如您所述)

javax.swing.JButt


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

  • 处理事件
  • 处理绘画

  • 您可以在此处找到有关实施细节的其他信息:

    希望这有帮助。
    祝你好运


    编辑以回应评论。

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

    通过这种方式,您可以将不同的渲染器对象指定给不同的列。

    添加新行时,它将正确填充。(您可以看到
    图像图标
    )。 因此,
    JButton
    对象也被正确插入

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

    这就是为什么
    JTable
    JButton
    上调用
    toString()
    方法并显示文本(如您所述)

    javax.swing.JButt


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

  • 处理事件
  • 处理绘画

  • 您可以在此处找到有关实施细节的其他信息:

    希望这有帮助。
    祝你好运


    编辑以回应评论。

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

    通过这种方式,您可以将不同的渲染器对象指定给不同的列。

    添加新行时,它将正确填充。(您可以看到
    图像图标
    )。 因此,
    JButton
    对象也被正确插入

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

    这就是为什么
    JTable
    JButton
    上调用
    toString()
    方法并显示文本(如您所述)

    javax.swing.JButt


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

  • 处理事件
  • 处理绘画

  • 您可以在此处找到有关实施细节的其他信息:

    希望这有帮助。
    祝你好运


    编辑以回应评论。

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

    通过这种方式,您可以将不同的渲染器对象指定给不同的列。

    添加新行时,它将正确填充。(您可以看到
    图像图标
    )。 因此,
    JButton
    对象也被正确插入

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

    这就是为什么
    JTable
    JButton
    上调用
    toString()
    方法并显示文本(如您所述)

    javax.swing.JButt


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

  • 处理事件
  • 处理绘画

  • 您可以在此处找到有关实施细节的其他信息:

    希望这有帮助。
    祝你好运


    编辑以回应评论。

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

    通过这种方式,您可以将不同的渲染器对象分配给不同的列。

    好的,我现在明白了问题所在。但是我想知道如何让JTable知道,在特定的列中,我想要JButton对象?好的,我现在明白问题了。但是我想知道如何让JTable知道,在特定的列中,我想要JButton对象?好的,我现在明白问题了。但是我想知道如何让JTable知道,在特定的列中,我想要JButton对象?好的,我现在明白问题了。但是我想知道如何让JTable知道在特定列中我想要JButton对象?