Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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 使用PropertyChangeListener刷新JFrame(不触发无限循环)_Java_Swing_Javabeans_Repaint_Propertychangelistener - Fatal编程技术网

Java 使用PropertyChangeListener刷新JFrame(不触发无限循环)

Java 使用PropertyChangeListener刷新JFrame(不触发无限循环),java,swing,javabeans,repaint,propertychangelistener,Java,Swing,Javabeans,Repaint,Propertychangelistener,使用java,我有一个包含多个JPanel的JFrame,其中包括各种JComboxes、JTextFields等。。。连接到xml文件中的条目,按日期组织和查看。所有内容都同步并正常工作,但在更改条目(即添加/删除等)时,我很难让JFrame更新/刷新,尽管在更改日期时它会刷新。我已经有了一个触发的PropertyChangeListener(打印到控制台),但当我尝试使用该侦听器刷新帧时,我认为我只是在重新验证侦听器 以下是JFrame中的代码(我用注释表示失败的段): 使用每日查看此框架在

使用java,我有一个包含多个JPanel的JFrame,其中包括各种JComboxes、JTextFields等。。。连接到xml文件中的条目,按日期组织和查看。所有内容都同步并正常工作,但在更改条目(即添加/删除等)时,我很难让JFrame更新/刷新,尽管在更改日期时它会刷新。我已经有了一个触发的PropertyChangeListener(打印到控制台),但当我尝试使用该侦听器刷新帧时,我认为我只是在重新验证侦听器

以下是JFrame中的代码(我用注释表示失败的段):

使用
每日查看此框架在顶部声明为实例变量

编辑


如果有人在读这篇文章,我会让propertyChangeListener触发某些事件,这些事件会刷新底层面板,但当propertyChangeListener再次被调用时,会导致无限循环。(re)validate()和repaint()似乎没有这个问题,但它们并没有刷新面板的内容……任何能为我指出正确方向/链接到类似问题等的人都将不胜感激。

当您使用“this”指针时,它总是指向您所在的类。我相信你的问题来了,因为“this”指针指的是你的监听器,而不是JPanel。也许你的问题可以通过

Frame thisFrame = this;
body.addPropertyChangeListener(new PropertyChangeListener() {
        public void propertyChange(PropertyChangeEvent evt) {
            System.out.println("OperatorView.propertyChange");
            //***This is where I'm trying to TRIGGER the REFRESH***
            thisFrame.refreshFrame(); }
    });

那似乎不起作用。Eclipse希望将thisFrame声明为最终变量(我也尝试将其声明为实例变量)。我是否应该从
refreshFrame()
方法中删除此。
?另外,
thisFrame
是否与我试图刷新的实例不同?奇怪,所以当我替换
thisFrame.refreshFrame()时thisFrame.removeAll()
侦听器擦除JFrame(我想这回答了我关于实例的问题),但当我切换到
thisFrame.validate()时;thisFrame.repaint()仍然没有乐趣:(目前我正在使用计时器每隔几秒钟刷新一次JFrame,但如果可能的话,我宁愿避免这样做。
        thisFrame = this;
        body.addPropertyChangeListener(new PropertyChangeListener() {
            public void propertyChange(PropertyChangeEvent evt) {
                System.out.println("OperatorView.propertyChange");
//              thisFrame.removeAll();
//              thisFrame.dispose();
//              thisFrame.remove(body);
//              thisFrame.add(new JScrollPane(body),     BorderLayout.CENTER);
                thisFrame.getContentPane().validate();
//              thisFrame.revalidate();
                thisFrame.getContentPane().repaint();
//              thisFrame.refreshFrame(); 
                }
        });
Frame thisFrame = this;
body.addPropertyChangeListener(new PropertyChangeListener() {
        public void propertyChange(PropertyChangeEvent evt) {
            System.out.println("OperatorView.propertyChange");
            //***This is where I'm trying to TRIGGER the REFRESH***
            thisFrame.refreshFrame(); }
    });