Java 从不同的JFrame更新JTable

Java 从不同的JFrame更新JTable,java,swing,netbeans,jframe,defaulttablemodel,Java,Swing,Netbeans,Jframe,Defaulttablemodel,实际上,我有一个JFrame(主窗口),其中有一个JTable。还有几个按钮,比如添加、删除、刷新 Refresh使用函数(updateTable),该函数具有以下代码,可以正常工作: try { ResultSet R = Home.getStatement().executeQuery("Select * from Schooldata"); int count =0; while(R.next())

实际上,我有一个JFrame(主窗口),其中有一个JTable。还有几个按钮,比如添加、删除、刷新

Refresh使用函数(updateTable),该函数具有以下代码,可以正常工作:

 try
        {
            ResultSet R = Home.getStatement().executeQuery("Select * from Schooldata");
            int count =0;
            while(R.next()) {  count++; }



school_data = new String[count][6];
            R = Home.getStatement().executeQuery("Select Schoolname,city,ProgramOpted,coordinator_name,Trainers,contactnum from Schooldata");
            count =0;
            while(R.next())
            {   
                for(int i=0;i<6;i++)
                {   school_data[count][i]= R.getString(i+1);
                    System.out.println(R.getString(i+1));
                }
                count++;
            } 
        }
        catch(SQLException S)   {JOptionPane.showMessageDialog(null,S);}

         jTable1.setModel(new DefaultTableModel(school_data,new String [] {
                "School Name", "City", "Program", "Coordinator", "Trainers", "Contact Number"
            }));
我相信你的问题就在这里(如果没有:

您正在创建一个全新的主对象,更改其状态,并希望这将更改可视化主对象的状态,但您发现,不,它不会

相反,您需要将可视化主对象的引用传递到上面的代码中,然后对其调用方法,而不是对新创建的完全唯一的对象调用方法

无论你做什么,都不要试图通过使字段或方法
静态
来解决这个问题。是的,这可能会起作用,但它会破坏OOPs,使你的程序难以测试或扩展


另一方面,第二个依赖窗口不应该是另一个JFrame,事实上很可能应该是一个模态JDialog。因为如果您使用JDialog,那么对话代码就不需要将信息推送到调用窗口中。相反,调用代码将知道您何时处理完对话,因此在这一点上,如果dialog的状态是好的(如果你没有说取消,没有任何更改),那么调用代码可以很容易地从对话框代码中提取信息。关于我所说的一个具体示例,请看我对一个类似问题的回答,这个问题是关于在两个窗口之间传递信息的


也可以找到类似的问题和解决方案。

请查看您是否正在处理主框架。如果没有,请尝试创建主框架的对象并尝试访问它以刷新表。您还可以在刷新对话框文件中添加main frame.java文件的导入,并尝试刷新表。还可以检查表是否为公共静态因此,从另一个帧访问它。如果为此目的创建刷新函数,那么它将是最好的。我的函数代码如下-

    import package.mainframe;


OP还在创建一个JTable的新实例……不知道是删除了旧实例还是添加了新实例+1@MadProgrammer:谢谢。是的,安会很高兴澄清事情的!谢谢,我会让你知道,一旦我用JDialog做了。看到了吗,但实际上我是用setVisible做的(true)对于另一个JFrame,使用dispose();对于前一个JFrame,它仍然不正确吗?对于static,它可以工作..而另一种情况可以是JDialog。
int confirm = Home.getStatement().executeUpdate(Query);
if(confirm == 1)
{
    JOptionPane.showMessageDialog(null,"Record Added","Saved",1);
    new Main().updateTable();  // ****** HERE ******
}
    import package.mainframe;
    MainFrame mainframe = new MainFrame();
    try
        {
            int confirm = Home.getStatement().executeUpdate(Query);
            if(confirm == 1)
            {
                JOptionPane.showMessageDialog(null,"Record Added","Saved",1);
                mainframe.updateTable();    //or mainframe.functioncall();
            }
            else  JOptionPane.showMessageDialog(null,"There is some Error.....","Error",0);


        }
        catch(SQLException S)
        {
            JOptionPane.showMessageDialog(null,S,"Error",0);
        }