这是我的新MyJtable
public void addWidget(Book w) {
datalist.add(w);
fireTableRowsInserted(datalist.size()-1, datalist.size()-1);
}
调用类
MyJtable tv = new MyJtable(a);
table = new JTable(tv);
//tv.addWidget(b3);
JScrollPane pane2 = new JScrollPane(table);
按钮CLick功能
public void actionPerformed(ActionEvent e)
{
MyJtable tv1 = new MyJtable();
Book b3 = new Book ("Java nutshell-299", "Ajfdfdfdingya2") ;
if("Add".equals(e.getActionCommand()))
{
JOptionPane.showMessageDialog(null,"Add button is clicked");
tv1.addWidget(b3);
}
当我点击按钮然后我看不到任何GUI chnage但是如果调用
tv1.addWidget(b3);
}
之前,我的意思是在加载然后我可以看到新书但不是点击按钮
答案 0 :(得分:3)
我看到您将行添加到您刚刚在actionPerformed
方法中创建的 new 表中。通常,我们使用操作来更改/更改现有的GUI组件。 可能是您在GUI上看到任何更改的原因。
我想,滚动窗格中显示的表是用
创建的MyJtable tv = new MyJtable(a);
table = new JTable(tv);
尝试将行添加到table
(通过tv
(必须先成为实例变量)而不是新创建的表。
答案 1 :(得分:1)
检查是否在setValueAt
的具体实现中覆盖了AbstractTableModel
。默认实现为空。
答案 2 :(得分:1)
我认为Andreas_D已经确定了一个核心问题。您可能也遇到问题,因为您要覆盖AbstractTableModel
而不是DefaultTableModel
。 DefaultTableModel
已经完成了许多事件触发方法。
答案 3 :(得分:1)
这是我的新MyJtable
那是错的。该表不应该有addWidget()方法。
所有数据更新都应直接通过TableModel完成。然后TableModel将通知表在数据更改时重新绘制自己。
您永远不应该访问TableModel本身之外的TableModel使用的数据存储。昨天你问了另一个问题时,我给了你一个完整的解决方案。