Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java-JDialog关闭刷新JFrame问题_Java_Swing - Fatal编程技术网

java-JDialog关闭刷新JFrame问题

java-JDialog关闭刷新JFrame问题,java,swing,Java,Swing,这个场景是,我的JFrame上有一个名为“MainFrame”的JTable,我可以使用名为“EditFrame”的JDialog编辑保存在xml文件中的数据。我可以通过单击“EditFrame”上的保存按钮来更改xml文件中的数据,但它不会在“MainFrame”上重新加载JTable。大型机的代码如下所示: package ca.ism.wen.gui; import java.awt.BorderLayout; import java.awt.Container; ... import

这个场景是,我的JFrame上有一个名为“MainFrame”的JTable,我可以使用名为“EditFrame”的JDialog编辑保存在xml文件中的数据。我可以通过单击“EditFrame”上的保存按钮来更改xml文件中的数据,但它不会在“MainFrame”上重新加载JTable。大型机的代码如下所示:

package ca.ism.wen.gui;

import java.awt.BorderLayout;
import java.awt.Container;
...
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;


public class MainFrame extends JFrame implements ActionListener{

    static JTable jt = null;
    static List<RdpServ> rdps = null;
    static Vector<String> header = null;
    static Vector<Vector<String>> data = null;
    static TableModel tm = null;

    public MainFrame(){

        header = new Vector<String>();
        ...         
        loadData();

        jt = new JTable(tm);

        Container con = this.getContentPane();
        JScrollPane p = new JScrollPane(jt);
        con.add(p);

        JButton btnEdit = new JButton("Edit");
        btnEdit.setActionCommand("Edit");
        btnEdit.addActionListener(this);
        JButton btnLogout = new JButton("Logout");
        btnLogout.setActionCommand("Logout");
        btnLogout.addActionListener(this);

        JPanel jp = new JPanel();
        jp.add(btnEdit);
        jp.add(btnLogout);
        con.add(jp, BorderLayout.SOUTH);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(800,600);
        setVisible(true);
    }


    public void actionPerformed(ActionEvent e) {
        String cmd = e.getActionCommand();
        if (cmd.equals("Edit")) {
            EditFrame ef = new EditFrame();
            ef.addWindowListener(new WindowAdapter(){
            @Override
                public void windowClosed(WindowEvent e) {
                    refresh();
                }
            });
        }
        else if (cmd.equals("Logout")) {
            UserDao.signoff();
            System.exit(0);
        }
    }

    public static void refresh(){
        loadData();
        jt.repaint();

    }

    public static void loadData(){
        rdps= UserDao.getRs();
        data = new Vector<Vector<String>>();
        for (RS rdp:rdps){
            Vector<String> v = new Vector<String>();
            ...
            data.add(v);
        }

        tm = new DefaultTableModel(data,header){
            public boolean isCellEditable(int row, int column)
            {
                return false;
            }
        };

    }
}
包ca.ism.wen.gui;
导入java.awt.BorderLayout;
导入java.awt.Container;
...
导入javax.swing.table.AbstractTableModel;
导入javax.swing.table.DefaultTableModel;
导入javax.swing.table.TableModel;
公共类大型机扩展JFrame实现ActionListener{
静态JTable jt=null;
静态列表rdps=null;
静态向量头=null;
静态向量数据=空;
静态TableModel tm=null;
公共主机(){
header=新向量();
...         
loadData();
jt=新的JTable(tm);
Container con=this.getContentPane();
JScrollPane=新的JScrollPane(jt);
续(p);
JButton btnEdit=新JButton(“编辑”);
btnEdit.setActionCommand(“编辑”);
btnEdit.addActionListener(这个);
JButton btnLogout=新JButton(“注销”);
btnLogout.setActionCommand(“注销”);
btnLogout.addActionListener(此);
JPanel jp=新的JPanel();
jp.add(btnEdit);
jp.add(btnLogout);;
con.add(jp,BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
设置大小(800600);
setVisible(真);
}
已执行的公共无效操作(操作事件e){
字符串cmd=e.getActionCommand();
if(cmd.equals(“编辑”)){
EditFrame ef=新的EditFrame();
ef.addWindowListener(新的WindowAdapter(){
@凌驾
公共无效窗口关闭(WindowEvent e){
刷新();
}
});
}
else if(cmd.equals(“注销”)){
UserDao.signoff();
系统出口(0);
}
}
公共静态无效刷新(){
loadData();
jt.repaint();
}
公共静态void loadData(){
rdps=UserDao.getRs();
数据=新向量();
用于(RS rdp:rdps){
向量v=新向量();
...
数据.添加(v);
}
tm=新的DefaultTableModel(数据,标题){
公共布尔值可编辑(int行,int列)
{
返回false;
}
};
}
}
我在谷歌上搜索了很多,并在网上尝试了这个解决方案。它们都不适用于我的代码。请帮忙。谢谢,伙计们

tm = new DefaultTableModel(data,header){
        public boolean isCellEditable(int row, int column)
        {
            return false;
        }
    };
好的,在创建模型之后,我看不到您在
loadData()
函数内将
模型
添加回
。创建
tm
后,请尝试:
jt.setmodel(tm)
,因为
jt
loadData()函数中的表实例

jt
tm
有线名称,难以理解:将它们放大一点,例如:
jTable
tModel

编辑:

public static void loadData(){
        rdps= UserDao.getRs();
        data = new Vector<Vector<String>>();
        for (RS rdp:rdps){
            Vector<String> v = new Vector<String>();
            ...
            data.add(v);
        }

        tm = new DefaultTableModel(data,header){
            public boolean isCellEditable(int row, int column)
            {
                return false;
            }
        };

       jt.setModel(tm);  // <------------------- here

    }
publicstaticvoidloaddata(){
rdps=UserDao.getRs();
数据=新向量();
用于(RS rdp:rdps){
向量v=新向量();
...
数据.添加(v);
}
tm=新的DefaultTableModel(数据,标题){
公共布尔值可编辑(int行,int列)
{
返回false;
}
};

jt.setModel(tm);//假设
EditFrame
是一个模式对话框。您可以等待它返回,然后刷新表(模式对话框阻塞直到关闭)。另外,取决于你如何设置
EditFrame
windowClosed
我不会被触发…@MadProgrammer,我认为他没有在他的代码显示我时将模型添加回表中。我已经在回答中指出了这一点。@Sage虽然这是一个很好的观点,但仅凭代码片段很难知道。你可能是对的谢谢你的回复。我尝试了你的建议。在loadData()函数的末尾,我添加了jt=new JTable();jt.setModel(tm);当然,我删除了“jt=new JTable(tm);”在大型机构造函数中。但是,它仍然不起作用。@user2962555,为什么要删除
jTable
?您不需要创建另一个jTable。您以前的实现很好。只需在
load()中调用
jt.setModel(tm)
函数。检查编辑是否有效。是的!!!非常感谢您,Sage。我非常感谢您的帮助。此外,我将根据您的建议更改我的标识符名称。谢谢!!