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

Java 重新初始化组件时,我的eventlistener停止工作,java,swing,events,awt,event-listener,Java,Swing,Events,Awt,Event Listener,我有一个不同屏幕的程序(用JPanels表示)。每次打开屏幕时,我都会重建面板,并将其放置在JFrame上 现在,当我第一次构建面板(总是相同的功能)并按下按钮时,附加到面板上的代码将运行。当我重建屏幕时,eventSource将永远不会等于实际的eventSource 见代码: public class NewUserScreen extends JPanel implements MouseListener{ //SButton inherits from Component

我有一个不同屏幕的程序(用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();
        }

    }
}
  • 让这个程序有不同的屏幕(用JPanels表示)。 每次屏幕打开时,我都会重建面板,并将其放置在屏幕上 JFrame

    • 使用而不是删除并将新视图添加到
  • 现在,当我第一次构建面板时(总是一样的) 功能)并按下按钮,附加到其上的代码将运行。当我 重新生成屏幕eventSource将永远不会等于实际值 事件源

    • 必须调用父级(
      JFrame
      )的
      (重新)validate()
      repaint()
      ,一次作为最后的代码行(在对容器进行所有更改之后)

  • 不知道如何将
    JPanel
    放置到
    JFrame
    ,以便更快地发布一个简短、可运行的、大约只有一个
    JButton
    (调用add
    JPanel
    JFrame
    )和
    JPanel
    JComponent
    ,这导致了a.m.问题,我实际上忘记了
    remove()实际代码中的etc函数。对不起,我好像脑损伤了!不接受:-),您忘了发布SSCCE,这里的所有内容,包括我的答案都非常简短,请确保问题存在于未发布在此处的其他代码中。。。