【问题标题】:Unable to add JButtons wrapped in JPanel into JTable无法将包装在 JPanel 中的 JButton 添加到 JTable 中
【发布时间】:2014-09-07 06:55:13
【问题描述】:

我有一个JTable,表格的最后一列用于添加 2 个按钮。下面是我JTable的格式。

下面是我的代码

private class ViewLawyersDisplayData extends ComponentAdapter
     {
        @Override
        public void componentShown(ComponentEvent e) 
        {
            dbConnector = new DBHandler();
            dbConnector.makeConnection();

            ResultSet rs =  dbConnector.selectAllLawyerDetails();

            if(rs==null)
            {
                JOptionPane.showMessageDialog(null,"The table is empty");
            }
            else
            {
                try
                {
                    while(rs.next())
                    {
                        int id = rs.getInt("lawyer_id");
                        String name = rs.getString("Name");
                        String address = rs.getString("Address");
                        String email = rs.getString("Email");
                        String phone = rs.getString("Phone");

                        JButton update = new JButton("Update");
                        JButton delete = new JButton("Delete");

                        JPanel btnPanel = new JPanel();
                        btnPanel.setLayout(new FlowLayout());
                        btnPanel.add(update);
                        btnPanel.add(delete);

                        Object[]row = {id,name,address,email,phone,btnPanel};

                        DefaultTableModel model = (DefaultTableModel) viewLawyersTable.getModel();
                        model.addRow(row);
                    }
                }
                catch(SQLException sqlE)
                {
                    JOptionPane.showMessageDialog(null,sqlE.getLocalizedMessage());
                }
            }
        }
     }

但是我无法将按钮添加到最后一列。它不显示按钮,而是在列中显示一些错误文本。以下是它显示给我的错误文本。

javax.swing.JPanel[,0,0,0x0,invalid,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]

我该如何解决这个问题?

【问题讨论】:

标签: java swing jtable jbutton flowlayout


【解决方案1】:

您不能将 Swing 组件添加到表格中,因为表格不用于显示实际组件。

请参阅Table Button Column,了解一种为表格列中的按钮提供渲染器/编辑器的解决方案。

【讨论】:

    【解决方案2】:

    您正在混合 模型视图。请注意,模型是要显示的数据。对于id,它是一个整数值,对于name,它是一个字符串。您的模型中还有其他几个字符串。

    您看到的输出不是错误消息。这只是在 JPanel 上调用 toString() 的结果,因为您将其视为模型的一部分,而不是可显示的视图。

    由于您的JPanel 应该显示 UI 组件,因此它是一个视图。您需要阅读有关 JTable 的更多信息,以了解如何自定义每列中的视图。

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多