0

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

    }
}
4

1 回答 1

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

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

    • 必须调用(re)validate()repaint()为父(JFrame在你的情况下),一次,作为最后的代码行(在对容器的所有更改完成之后)
于 2013-01-08T14:48:00.600 回答