我使用以下代码在现有对话框的新面板中显示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");
}
答案 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的建议更新/替换显示表中的现有模型。