java - 将 JPanel 行添加到 JTable 模型

标签 java swing jtable jpanel tablelayout

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

我尝试过这样的事情:

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=]

最佳答案

I get this text inside the row where this panel is supposed to be:

默认情况下,表格的呈现将简单地对 TableModel 中的数据调用 toString() 方法,因此您可以看到 JPanel 的 toString() 值。

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

the red buttons are supposed to be invisible till the edit button on the top right is clicked.

因此您需要添加一列数据来表示红色按钮。首先阅读Table Button Column 。它演示了如何向表中添加一列按钮以及如何添加单击按钮时要调用的操作。

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

TableColumnModel 具有 removeTableColumn(...)addTableColumn(..) 等方法来帮助解决此问题。您还可以使用 JTable 的 getColumn(...) 方法来获取要删除并保存的列以供将来使用。

阅读 Swing 教程中关于 How to Use Table 的部分有关渲染器和编辑器的更多信息。

关于java - 将 JPanel 行添加到 JTable 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59096303/

相关文章:

java - Maven2 和 Swing 项目 : Build & run swing application

java - 将行添加到 JTable 时出错

java - 从 jtable 中获取选定行的值

java - 如何在JLayeredPane的任意一层上使用图形(Piant组件)

Java Sockets - 发送对象并将对象分发给所有连接的客户端

java - 不继承可以实现多态吗?

java - 如何打印到同一行?

java - JFileChooser 没有文件名文本字段选项

java - 如何使用 JTable/JScrollPane 摆脱边框

java - 为什么这个线程是安全的?