从不同的JFrame更新JTable

时间:2014-09-21 19:02:35

标签: java swing netbeans jframe defaulttablemodel

实际上,我有一个带有JTable的JFrame(主窗口)。和几个按钮,如添加,删除,刷新。

刷新使用下面具有以下代码的函数( 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"
            }));

当我点击“添加”时,会出现另一个JFrame窗口并要求进一步保存到数据库的详细信息并显示确认消息并使用上述功能刷新表(在不同的JFrame即主窗口上)。

问题是,我正在调用相同的函数但是从另一个JFrame调用。期望更改反映在主JFrame中。

在下面的代码中使用 new Main()。updateTable(); 方法。它只是不起作用。

try
            {
                int confirm = Home.getStatement().executeUpdate(Query);
                if(confirm == 1)
                {
                    JOptionPane.showMessageDialog(null,"Record Added","Saved",1);
                    new Main().updateTable();
                }
                else  JOptionPane.showMessageDialog(null,"There is some Error.....","Error",0);


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

2 个答案:

答案 0 :(得分:3)

你的问题我相信就在这里(没有minimal example program很难说:

int confirm = Home.getStatement().executeUpdate(Query);
if(confirm == 1)
{
    JOptionPane.showMessageDialog(null,"Record Added","Saved",1);
    new Main().updateTable();  // ****** HERE ******
}

你正在创建一个全新的Main对象,改变它的状态,并希望这会改变可视化Main对象的状态,但是你发现不是,它不会。

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

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


顺便说一下,第二个依赖窗口不应该是另一个JFrame,实际上可能应该是一个模态JDialog。因为如果使用JDialog,则不需要将对话框代码推送信息放入调用窗口。相反,当您完成对话框的处理时,调用代码将知道,所以此时如果对话框的状态良好(如果您没有说取消它而没有更改),那么调用代码可以轻松从对话框代码中提取信息。有关我所谈论的具体示例,请查看我对在两个窗口here之间传递信息的类似问题的回答。

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

答案 1 :(得分:0)

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

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