【问题标题】:How to "refresh" a JTable (in a frame A) when the execution of frame B is over?当 B 帧的执行结束时,如何“刷新”一个 JTable(在 A 帧中)?
【发布时间】:2017-06-19 22:35:08
【问题描述】:

我正在使用 JFrame 创建一个 Java 项目。

我创建了一个 JFrame A(在 class mainPanel 中),其中包含一个扩展 JTable (public class myTable extends JTable) 的 myTable tbl 对象。 我这样做是因为这个扩展必须有一个公共方法来填充表tbl 从数据库中获取值。 每次启动项目时都会填充此表。

框架A 还包含一个JButton (JButton b_partita)。 这个组件 (b_partita) 使用:

b_partita.addActionListener(new aggiungiPartita());

框架B 主要用于填充我的数据库。 如果一切顺利,当我按下B 中的save 按钮时,JFrame 将自动关闭。

问题是:

有没有办法在B的活动结束后立即“刷新”表tbl(在A中)?

谢谢大家, 斯特凡诺

【问题讨论】:

  • 使用模态对话框;使用某种观察者模式
  • 使用SwingWorker在后台填充表格模型for exampleexample

标签: java jframe jtable jbutton actionlistener


【解决方案1】:

当您按下“保存”并(我假设)将新数据保存到数据库时,您需要通知表基础数据已更改。

从您的描述看来,您已扩展 JTable 以在构建时从数据库中填充数据。这不是你想做的。相反,您需要创建自己的表模型,该模型实现在请求时获取数据的方法。创建您的类的对象,然后将其传递给JTable 构造函数。您很少需要扩展 JTable 类本身。有关如何执行此操作的详细信息,请参阅Java Tutorial

我建议你的表模型类扩展AbstractTableModel,因为这为你做了很多工作。它提供了一个fireTableDataChanged 方法(以及更精细的示例),负责通知表它应该自行刷新。

如果您在不扩展抽象模型的情况下实现自己的模型,那么工作量就更大了。您需要使用适当构造的TableModelEvent 调用所有表模型侦听器的tableChanged 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多