如何在动作监听器的事件上刷新jtable的内容?

时间:2013-08-10 13:33:20

标签: java swing jtable actionlistener

我使用以下代码在现有对话框的新面板中显示jtable。我已经将mytablemodel类用于表模型,而setmodel方法就像构造函数一样(因为我必须使用相同的模型对象创建几个表,所以我使用了方法而不是构造函数)。但是我的jtable如何不改变actionlisten上的内容。即使输入值发生变化,相同的内容也会重新出现... plz help

 btnShow.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
         showTable();

        }

    });
    panel_1.add(btnShow);

private void showTable() {
     fillData();
    //filldata used to fill object data for table using date specified by user                   


                MyTableModel model=new MyTableModel();
                model.setModel(data,col,totalrow);
                table = new JTable(model);
                table.setForeground(new Color(255,0,0) );
                System.out.println("after table");
                panel_2.add(new JScrollPane(table));
                panel_2.setVisible(true);
                table.setVisible(true);
                System.out.println("after scroll pane");

 }

2 个答案:

答案 0 :(得分:4)

每次都不要创建新的JTable。相反,获取模型并替换/编辑数据(最好),或者为表格提供一个新模型(“ok”)。

模型数据更改后,您需要调用“fireTableXXX”方法。

你可以调用.fireTableDataChanged()来重新加载所有数据。还有一些方法可以指定哪些行或单元格被更改,因此不必重新加载它们。

答案 1 :(得分:1)

  

但有些我的jtable如何不改变内容

这是因为您正在创建一个新表,但该表在GUI上不可见。

panel_2.add(new JScrollPane(table));

这只是向GUI添加一个组件,但组件的大小为(0,0)。将组件添加到可见GUI时,您需要以下代码:

panel.add(...); panel.revalidate(); panel.repaint(); //有时需要

然后将在面板上调用布局管理器,添加的组件将显示在适当的位置。

但是,更好的解决方案是按照Xabster的建议更新/替换显示表中的现有模型。