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

Java 数据库和重新加载表模型中的Swing表更新值,java,swing,jtable,Java,Swing,Jtable,我想在DB中更新swing表的行值,清除模型,并用新的更新值加载新模型。问题是,当我单击按钮更新值时,模型被清除,但表中没有显示任何数据。我做错了什么 为了简化示例,删除了与表无关的部分代码 公共类ShowValues扩展了JFrame{ //Attributes private DefaultTableModel model; private JTable table = new JTable() { public boolea

我想在DB中更新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);
    }

}
//属性
私有模型;
私有JTable表=新JTable()
{
公共布尔值可编辑(int行,int列)
{                
返回false;
};
};
公众价值观(){
btnDeleteItem.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件arg0)
{
int selectedRownNumber=table.getSelectedRow();
字符串selectedItemId=(字符串)table.getModel().getValueAt(selectedLownNumber,0);
//将数据库中选定项目的状态更改为“已删除”的代码
model.setRowCount(0);//清除模型
showTable();//加载新模型
labelMsg.setText(“删除项”);
}   
});
BTN删除项目.立根(200、320、203、57);
contentPane.add(btnDeleteItem);
}
公共空间显示表()
{
字符串columnNames[]={“项目Id”、“项目名称”、“项目价格”};
//从数据库中获取数据的代码
字符串数据值[][]=新字符串[itemNum][3];
对于(int i=0;i
//将数据库中选定项目的状态更改为“已删除”的代码

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

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

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

问题是您创建了一个新的JTable,但从未将该表添加到JScrollPane的视口中

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

table.setModel( theNewlyCreateTableModel );

感谢您的回答。我将表添加到JScrollPane的视口中,但我没有发布该代码,只是为了使eample更容易,并专注于重新加载模型的特殊任务。
我将表添加到JScrollPane的视口中
-不,您没有!!!ActionListener中的代码调用
showTable()
method,它创建了一个新的JTable。该表从未添加到视口中。视口中仍然包含原始JTable,没有任何数据。确定。我已更新到showTable方法的最后几行,在该行中,我将表添加到JScrollPane的视口中,并仅创建了一个JTable。仍然存在相同的问题。您重新绘制了面板吗?您是否验证了该方法该模型实际上包含数据?发布的代码看起来合理,但没有整个代码的上下文,我们无法判断错误所在。
为了使示例更简单,删除了与表无关的部分代码。
-发布随机代码行并不能使其更简单。发布一个适当的代码来演示问题em.我们无法访问您的数据库,因此您需要对数据进行“硬编码”以模拟您正在执行的操作。并且不要使用空布局!是的,它包含数据。如果我写入System.out.println(“model”+model.getRowCount()),它会显示模型中的行号。重新绘制面板是什么意思?可能是错误