重新初始化组件时,我的eventlistener停止工作

时间:2013-01-08 14:40:35

标签: java swing events awt event-listener

我有不同屏幕的此程序(由JPanels代表)。每次屏幕打开时,我都会重建该面板,并将其放在JFrame

现在,当我第一次构建面板(总是使用相同的功能)并按下按钮时,附带的代码将会运行。当我重建屏幕时,eventSource将永远不会等于实际的eventSource

参见代码:

public class NewUserScreen extends JPanel implements MouseListener{
    //SButton inherits from Component
    SButton sb;

    ...

    public void SetFields(){
        removeAll();
        revalidate();
        repaint();

        ...     

        sb = new SButton(new Point(282, 295), "Save");
        sb.addMouseListener(this);
        add(sb);

        ...
    }

    ...

    @Override
    public void mouseReleased(MouseEvent arg0) {
        if(arg0.getSource().equals(sb)){
            DBManager.addUser(...);
        }else{
            //So after the 2nd build, it will always run this code :(
            ScreenManager.OpenAdminS();
        }

    }
}

1 个答案:

答案 0 :(得分:2)

  1.   

    让这个程序有不同的屏幕(由JPanels代表)。   每次屏幕打开时,我都会重建该面板,然后将其放在屏幕上   的JFrame。

  2.   

    现在,当我第一次构建面板时(总是一样的)   功能)并按下一个按钮,附加的代码将运行。当我   重建屏幕eventSource永远不会等于实际   的EventSource。

    • 必须为父级(在您的情况下为(re)validate())调用repaint()JFrame,一次,作为最后一行代码行(在完成对容器的所有更改之后)