无法将JPanel中包装的JButton添加到JTable中

时间:2014-09-07 06:55:13

标签: java swing jtable jbutton flowlayout

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

enter image description here

以下是我的代码

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

如何解决此问题?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

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

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