【问题标题】:Make custom JTableModel to listen to changes in ArrayList制作自定义 JTableModel 以监听 ArrayList 中的变化
【发布时间】:2018-10-13 00:12:06
【问题描述】:

我有一份客户名单。每个客户都有一个帐户列表,每个帐户都有一个交易列表。

最近我一直在使用 ObjectOutputStream/ObjectInputStream 为我的程序实现导入/导出功能。这有效,它可以保存所有内容并正确加载。

我的问题是,一旦更改了 ArrayList,JTable 就不会自动更新(我创建了一个自定义 JTableModel,它目前只将每个单元格设置为不可编辑。有没有适合我需要的侦听器?我的 CustomJTableModel 扩展默认表模型。

我得到了在包含 JMenuBar 的自定义 MainMenu 类中加载/保存的触发器,它不直接了解 TableModel 或 JTable(否则我可以做一个“便宜”的方式并再次添加它)。

有诸如 fireTableDataChanged 之类的方法,但它只监听 JTable 本身。

不确定我是否需要发布任何代码,认为这可能是一个简单的问题,并且那里有适合的侦听器。

【问题讨论】:

  • 很可能是实现中存在缺陷。如果您在下面查看我的答案,您将毫无疑问地解决您的问题。

标签: java swing arraylist jtable


【解决方案1】:

我对您的问题的建议是在您的 JTable 类中实现(Java 观察者接口),并在利用和修改 ArrayList 的类中实现(Java 可观察接口)。这样,每当您的 arrayList 发生更改时,都会调用 update 方法并相应地更新 JTable。

这是一个详细说明我上述解释的教程

public class JTable implements Observer
{

// this is the method that will be invoked everytime a change has occured.
 public void update(Observable obs, Object obj)
   {
      // To implements as required
   }

}

public class Store implements Observable
{
   ArrayList<Customers> listOfCustomers;

 public void setValue(Customer n)
   {
      this.listOfCustomers.Add(n);
      setChanged();
      notifyObservers(); // this will notify your JTable
   }
}

这只是如何实施系统的开始。

【讨论】:

  • 谢谢。不知道我怎么能竖起大拇指?它有帮助,我设法让它发挥作用。
  • 如果你能给予我信任,我将不胜感激,因为它对你有帮助。
【解决方案2】:

我的问题是,一旦 ArrayList 被更改,JTable 不会自动更新

您不应该对 ArrayList 进行更改。

ArrayList 应该用作 TableModel 的数据结构。然后,如果您想对 ArrayList 进行更改(即添加/删除行),那么这应该通过 TableModel 完成。

有关使用此方法创建自定义模型的分步示例,请参阅 Row Table Model

现在,另一方面,如果您的问题是存储在 ArrayList 中的 Object 的属性发生更改,那么是的,您需要使用 Observer 模式。

【讨论】:

    猜你喜欢
    • 2018-09-22
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    相关资源
    最近更新 更多