Java 将JPanel行添加到JTable模型

Java 将JPanel行添加到JTable模型,java,swing,jtable,jpanel,tablelayout,Java,Swing,Jtable,Jpanel,Tablelayout,我试图将jpanel作为一行添加到我的jtable中,如下所示: ,在单击右上角的编辑按钮之前,红色按钮应不可见 我试过这样的方法: JPanel row = new JPanel(); row.setBackground(new Color(255, 255, 255, 0)); row.setAutoscrolls(true); row.setBorder(new EmptyBorder(0, 0, 0, 0));

我试图将jpanel作为一行添加到我的jtable中,如下所示: ,在单击右上角的编辑按钮之前,红色按钮应不可见

我试过这样的方法:

JPanel row = new JPanel();
            row.setBackground(new Color(255, 255, 255, 0));
            row.setAutoscrolls(true);
            row.setBorder(new EmptyBorder(0, 0, 0, 0));
            row.setLayout(new TableLayout(new double[][]{
                    {TableLayout.FILL, TableLayout.FILL},
                    {TableLayout.PREFERRED}}));
            ((TableLayout)row.getLayout()).setHGap(0);
            ((TableLayout)row.getLayout()).setVGap(0);

            JLabel deleteRow = new JLabel();
            deleteRow.setText("");
            deleteRow.setIcon(new ImageIcon(getClass().getResource("/com/example/clinicsystem/pictures/remove.png")));
            JLabel rowText = new JLabel();
            rowText.setText(comboBoxPermissions.getSelectedItem().toString());
            rowText.setForeground(Color.black);
            rowText.setFont(new Font("Helvetica-Normal", Font.PLAIN, 14));
            rowText.setHorizontalAlignment(SwingConstants.CENTER);

            row.add(deleteRow, new TableLayoutConstraints(0, 0, 0, 0, TableLayoutConstraints.FULL, TableLayoutConstraints.FULL));
            row.add(rowText, new TableLayoutConstraints(0, 0, 0, 0, TableLayoutConstraints.FULL, TableLayoutConstraints.FULL));

            model.addRow(new JPanel[]{row});
但当我运行该项目时,我会在该面板所在的行中获得以下文本:

javax.swing.JPanel[,0,0,0x0,invalid,layout=info.clearthought.layout.TableLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@254d8187,flags=33554441,maximumSize=,minimumSize=,preferredSize=]
我在该面板应该位于的行中获取以下文本:

javax.swing.JPanel[,0,0,0x0,invalid,layout=info.clearthought.layout.TableLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@254d8187,flags=33554441,maximumSize=,minimumSize=,preferredSize=]
默认情况下,表的呈现将简单地对TableModel中的数据调用toString方法,因此您可以看到JPanel的toString值

JTable不是为向TableModel添加组件而设计的。它是为向TableModel添加数据而设计的。然后根据添加到模型中的数据类型呈现数据

在单击右上角的编辑按钮之前,红色按钮应该是不可见的

因此,您需要添加一列数据来表示红色按钮。从阅读开始。它演示了如何向表中添加一列按钮,以及如何在单击按钮时添加要调用的操作

如果不希望列可见,则可以在创建表后从TableColumnModel中删除TableColumn。然后单击编辑按钮时,可以将TableColumn添加回TableColumnModel

TableColumnModel有一些方法,如removeTableColumn。。。和addTableColumn。。来帮忙。您还可以使用getColumn。。。JTable的方法获取要删除并保存的列以供将来使用


有关渲染器和编辑器的更多信息,请阅读Swing tuturial上的部分。

您将视图与模型混合在一起的方式很糟糕-JTable TableModel不应包含JPanel,而应包含非GUI逻辑数据。如果需要显示功能按钮,则视图组件需要在表的渲染器和编辑器中,而不是在模型中。@HovercraftFullOfEels如何将它们添加到渲染器或编辑器中?我需要创建一个完整的新类吗?还是可以不创建一个新类?有很多很棒的教程解释如何使用编辑器和渲染器,你真的需要学习这些,还有Camickr的答案,因为他是一个真正的挥杆专家。有没有办法让按钮栏变成一个标签栏,这样我就可以添加自己的图标,让它看起来像图片一样?@Muster:我想这个答案中的链接正好解释了这一点。1+@HovercraftFullOfEels哦,刚刚找到,谢谢: