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

时间:2017-01-15 02:39:41

标签: java netbeans jtable

从另一个窗口刷新jTable! 我尝试了很多次使用不同的类型,比如调用fire方法或再次调用你的模型,一个简单的代码将像这样使用它像一个bush按钮这样的事件:

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();
         }

所有这些刷新了表..但问题是它打开另一个窗口,所以我有两个窗口打开新的一个是刷新旧的不是..为什么我有另一个窗口没有调用它?

1 个答案:

答案 0 :(得分:1)

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

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程序结构。

侧面建议:

  • 这些fire方法,例如fireTableDataChanged()fireTableStructureChanged()应该是模型本身的内部 - 只有模型本身应该进行这些调用,而ActionListener不应该这样做。
  • 请务必阅读:The Use of Multiple JFrames, Good/Bad Practice?