从另一个窗口刷新jTable,但另一个正在运行



从另一个窗口刷新jTable!我在不同的类型中尝试了很多次,比如调用fire方法或再次调用您的模型,一个简单的代码将是这样的,将其与布什按钮这样的事件一起使用:

private void btn_add_updtActionPerformed(java.awt.event.ActionEvent evt) {
ItemsForm form = new ItemsForm();
//this:
form.mymodel();
//or this:
form.model.fireTableDataChanged();
//or this:
form.model.fireTableStructureChanged();
}

他们都刷新了表格。。但问题是它打开了另一个窗口,所以我打开了两个窗口,新的刷新了,旧的没有。。为什么我不打电话就换了一个窗口?

基于不完整数据的猜测。你的问题就在这里:

private void btn_add_updtActionPerformed(java.awt.event.ActionEvent evt) {
ItemsForm form = new ItemsForm();
// update form's state here
}

您可能已经存在一个ItemsForm实例,该实例已经显示并显示其数据。创建一个新的不会对已经显示的内容产生任何影响。

错误的解决方案是为ItemsForm提供静态字段,以便在另一个字段中显示对其中一个字段所做的更改。这样做将打破OOP规则,并使您的代码很难进行测试、升级和增强。

一个更好的解决方案是确保需要引用活动和显示的ItemsForm实例的代码有一个引用,可以直接通过构造函数或setter/getter方法调用,也可以更好地间接通过M-V-C程序结构。

附带建议:

  • 那些激发方法,如fireTableDataChanged()fireTableStructureChanged(),应该是模型本身的内部方法——只有模型本身应该进行这些调用,ActionListener不应该这样做
  • 请务必阅读:多个JFrame的使用,好/坏做法

最新更新