当我添加行时,从AbtractTableModel扩展的JTable不会更新GUI

时间:2011-01-18 06:24:08

标签: java swing user-interface jtable abstracttablemodel

这是我的新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);

   }

之前,我的意思是在加载然后我可以看到新书但不是点击按钮

4 个答案:

答案 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而不是DefaultTableModelDefaultTableModel已经完成了许多事件触发方法。

答案 3 :(得分:1)

  

这是我的新MyJtable

那是错的。该表不应该有addWidget()方法。

所有数据更新都应直接通过TableModel完成。然后TableModel将通知表在数据更改时重新绘制自己。

您永远不应该访问TableModel本身之外的TableModel使用的数据存储。昨天你问了另一个问题时,我给了你一个完整的解决方案。