1

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

按钮点击功能

 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

4 回答 4

3

我看到您将该行添加到您刚刚在方法中创建的actionPerformed表中。通常,我们使用操作来更改/更改已经存在的 GUI 组件。这可能是您在 GUI上看不到任何更改的原因。

我猜,滚动窗格中显示的表格是用

MyJtable tv = new MyJtable(a);
table = new JTable(tv);

尝试将行添加到tabletv必须首先将其作为实例变量)而不是新创建的表。

于 2011-01-18T06:33:14.817 回答
1

检查您setValueAt在具体实现中是否覆盖了AbstractTableModel. 默认实现为空。

于 2011-01-18T10:56:02.833 回答
1

我认为 Andreas_D 已经确定了一个核心问题。您可能还会遇到问题,因为您正在覆盖AbstractTableModel而不是DefaultTableModel. DefaultTableModel已经完成了许多事件触发方法。

于 2011-01-18T16:31:18.193 回答
1

这是我的新 MyJtable

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

数据的所有更新都应直接通过 TableModel 完成。然后 TableModel 会在数据发生变化时通知表重新绘制自己。

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

于 2011-01-19T04:22:25.687 回答