0

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

 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");

 }
4

2 回答 2

4

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

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

您可以调用 .fireTableDataChanged() 来重新加载所有数据。还有一些方法可以指定更改了哪些行或单元格,这样就不必全部重新加载。

于 2013-08-10T13:45:15.070 回答
1

但是有些我的jtable不会改变内容

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

panel_2.add(new JScrollPane(table));

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

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

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

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

于 2013-08-10T14:37:12.960 回答