JTable不会动态添加行

时间:2016-04-23 17:29:50

标签: java swing jtable

所以我有一个jtable,应该将Jtextfields中的字段添加到表中,表格根据需要存在于窗格中(列名称显示且没有行)但是当我单击添加新行时添加一个空白列(而且只添加一次)

创建我的表的方法

public void createTable(){
    model.setColumnIdentifiers(columns);
    JTable table = new JTable(model);       
    JScrollPane scrollPane = new JScrollPane(table);
    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    tablepanel.add(scrollPane, BorderLayout.SOUTH);

}

我用来添加数据的按钮

class AddHandler implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if(e.getSource()==btnUpload)
            {

                String nameRow = txtName.getText();
                String surnameRow = txtSurname.getText();
                String phoneRow = txtPhone.getText();
                String addressRow = txtAddress.getText();
                String postcodeRow = txtPostcode.getText();
                String emailRow = txtEmail.getText();
                Object[] row = {nameRow,surnameRow,phoneRow,addressRow,postcodeRow,emailRow};
                model.addRow(row);

            }

        }
    }

我将默认模型设置为全局变量,如下所示:

private DefaultTableModel model = new DefaultTableModel();

感谢任何建议

2 个答案:

答案 0 :(得分:1)

您的问题可能是由于将滚动窗格的大小设置为0.在使用table.setPreferredScrollableViewportSize(table.getPreferredSize())之前,您应该删除table.setPreferredSize()或设置表格的首选大小table.getPreferredSize() }。

答案 1 :(得分:1)

作为调用setPreferredScrollableViewportSize()的替代方法,请考虑覆盖表格getPreferredScrollableViewportSize()的实现,并将高度设为getRowHeight()的倍数;展示竞争示例here

JTable table = new JTable(tableModel) {

    @Override
    public Dimension getPreferredScrollableViewportSize() {
        return new Dimension(200, table.getRowHeight() * N);
    }
};

image

您可以在Implementing a Scrolling-Savvy Client中了解有关Scrollable界面的详情。