繁体   English   中英

如何在按下按钮时从另一个框架刷新JTable?

[英]How to refresh a JTable from another Frame as a button is pressed?

Java,如何在一帧中从另一帧刷新JTable

数据库操作后如何在不重新加载框架的情况下刷新JTable?

我知道有人问过非常类似的问题。 但是,没有提供的答案可以解决我的问题。

因此,我有一个使用Java处理与多个数据库交互的应用程序。 在程序中,您可以添加一条记录,更改要在Jtable中显示的条件,并编辑已经存在的记录(例如,更改客户端名称)。

我的程序的屏幕截图

当我单击“升序”复选框时,它会像预期的那样反转行。

现在,它由ASC订购,而不是像以前那样订购。

因此,这里的JTable是在我按下复选框或显示的任何其他按钮时更新的。

当您按一行时,将显示包含该行更多信息的另一帧。 您应该可以在其中编辑完成的名称/集,依此类推。 这行得通,因为当我检查数据库时,我看到所做的更改已应用。 同样,如果我单击刷新按钮。

被召唤的外部框架,因此您可以编辑行

但是,当我按“完成/编辑”时,在我手动执行某项操作(如按刷新按钮)之前,JTable根本不会更新。

这是外部JFrame中使用的代码。

    private void AlterTransactionMousePressed(java.awt.event.MouseEvent evt) {                                              
    EditTransaction();

}


private void EditTransaction(){
     GUImannager.RefreshServTable();
}

//In the GUImannager class

    public static void RefreshServTable(){
    System.out.println("RefreshServTable Method has been summoned.\n");
    MainGUI.TableRefresher();
    //The MainGUI is a static variable which contains the JFrame object of the main frame that is summoned that contains the core of the programs such as the pictures as i used.
}

TableRefresher方法与单击刷新按钮时使用的方法完全相同。 它的作用是启动一个调用此代码的线程。

//Gets the data from the database based on conditions.
                TableModel model = new DefaultTableModel(TransData, Colnombs);
            ServiceTable.setModel(model);
            ServiceTable.revalidate();
            ServiceTable.repaint();
            TableContainer.setViewportView(ServiceTable);

此代码通常有效。 但是,每当从外部来源召唤它时,它就根本不起作用。 它会打印出表明已被召唤的文本,但在外部召唤时不会刷新表,只有当在同一JFrame中的某个东西(例如“刷新”按钮)召唤时,它才会起作用。

我试过让代码“监听”更改然后进行更新,但是虽然显然是根据系统召唤出来的,但它并没有按照我想要的方式影响程序。

第二个JFrame在另一个类中,但是即使当我将其作为子类或在同一文件中时,它仍然无法正常工作,因此我怀疑问题与处理多个JFrame有关。

我知道这是一个非常复杂的问题,尽管提出了几乎相同的问题,但其中没有任何对我有用的答案。

手动检索数据,因此该表未“绑定”到任何数据库(这是因为我在SQLite源和MySQL源之间切换)。

如果需要更多信息/代码,我会很乐意提供。解决该问题的任何尝试将不胜感激。 如果这是一个简单的问题,对不起,因为我在软件编程方面还没有太多的经验。

诚恳...

// OrvilleNordström。

本教程说( http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#fire ),如果更改了DataModel,则必须触发事件。 据我所知,您每次都创建一个全新的DefaultModel,这不是解决方案。 如果发生更改,表正在等待事件。 像这样:

  • fireTableCellUpdated
  • fireTableRowsUpdated
  • fireTableDataChanged
  • fireTableRowsInserted
  • fireTableRowsDeleted
  • fireTableStructureChanged

如果向注册的侦听器触发这些事件之一,则表将显示正确的值。

我相信这不是两个框架的问题,而是不告诉gui(JTable)在数据更改后对其进行更新的问题。 也许在这里看看: 创建TableModel并动态填充jTable

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM