【问题标题】:Adding a JPanel row to a JTable model将 JPanel 行添加到 JTable 模型
【发布时间】:2020-03-24 13:12:33
【问题描述】:

我正在尝试将 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=]

【问题讨论】:

  • 您以一种糟糕的方式将视图与模型混合在一起——JTable TableModel 不应保存 JPanel,而应保存非 GUI 逻辑数据。如果您需要显示功能按钮,那么视图组件需要在表格的渲染器和编辑器中,而不是模型中。
  • @HovercraftFullOfEels 如何在渲染器或编辑器中添加它们?我需要开设一个全新的课程还是没有?
  • 有很好的教程解释了如何使用编辑器和渲染器,你真的需要学习这些,还有 Camickr 的回答,因为他是真正的 Swing 专家。

标签: java swing jtable jpanel tablelayout


【解决方案1】:

我在该面板应该位于的行内得到此文本:

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

JTable 并非旨在将组件添加到 TableModel。它专为您向 TableModel 添加数据而设计。然后根据添加到模型的数据类型呈现数据。

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

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

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

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

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

【讨论】:

  • 有没有办法让那个按钮栏变成标签栏,这样我就可以添加自己的图标,让它看起来像图片?
  • @mushter:我认为这个答案中的链接解释了就是这样。 1+
  • @HovercraftFullOfEels 哎呀,刚刚找到了,谢谢 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多