数据库和重新加载表模型中的Swing表更新值

时间:2016-06-11 15:45:51

标签: java swing jtable

我想更新数据库中的swing表的行值,清除模型,并使用新的更新值加载新模型。问题是当我单击按钮更新值时,模型被清除但表中没有数据显示。我做错了什么?

为了使示例更容易,删除了与表格无关的部分代码。

公共类ShowValues扩展了JFrame {

    //Attributes
    private DefaultTableModel model;
    private JTable table  = new JTable()
        {
            public boolean isCellEditable(int row, int column)
            {                
                    return false;               
            };
        };

    public ShowValues() {

        btnDeleteItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) 
            {
                int selectedRowNumber = table.getSelectedRow();
                String selectedItemId = (String) table.getModel().getValueAt(selectedRowNumber, 0);
                //code to change selected item's state to deleted in the DB
                model.setRowCount(0); //clear model
                showTable(); //load new model
                labelMsg.setText("Item deleted");   
            }   
        });
        btnDeleteItem.setBounds(200, 320, 203, 57);
        contentPane.add(btnDeleteItem);

    }


    public void showTable()
    {
        String columnNames[] = {"Item Id", "Item Name", "Item price"};

        //code to get the data form the DB

        String dataValues[][] = new String[itemNum][3];
        for(int i=0; i<itemNum; i++)
        {
            dataValues[i][0] = idItem[i];
            dataValues[i][1] = nameItem[i]; 
            dataValues[i][2] = priceItem[i]; 
        }

        model = new DefaultTableModel(dataValues, columnNames);
        table.setModel(model);
      scrollPane = new JScrollPane(table);
    scrollPane.setBounds(17, 20, 490, 205);
    scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    topPanel.add(scrollPane);
    }

}

1 个答案:

答案 0 :(得分:1)

  

//将所选项目的状态更改为DB中删除的代码

为什么要重新加载所有数据只是因为更改了行中一个属性的值?这不是很有效。

只需使用setValueAt(...)方法更改JTable中的值。

  

问题是,当我单击按钮更新值时,模型被清除但表中没有数据

问题是你创建了一个新的JTable,但是你从不将表添加到JScrollPane的视口中。

解决方案是不创建新的JTable。只需创建一个新的TableModel。然后你可以使用:

table.setModel( theNewlyCreateTableModel );