[英]How to refresh a JTable from another Frame as a button is pressed?
我知道有人问过非常类似的问题。 但是,没有提供的答案可以解决我的问题。
因此,我有一个使用Java处理与多个数据库交互的应用程序。 在程序中,您可以添加一条记录,更改要在Jtable中显示的条件,并编辑已经存在的记录(例如,更改客户端名称)。
当我单击“升序”复选框时,它会像预期的那样反转行。
因此,这里的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,这不是解决方案。 如果发生更改,表正在等待事件。 像这样:
如果向注册的侦听器触发这些事件之一,则表将显示正确的值。
我相信这不是两个框架的问题,而是不告诉gui(JTable)在数据更改后对其进行更新的问题。 也许在这里看看: 创建TableModel并动态填充jTable
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.