【问题标题】:When re-initializing a component, my eventlistener stops working重新初始化组件时,我的事件监听器停止工作
【发布时间】:2012-12-22 10:43:20
【问题描述】:

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

    }
}

【问题讨论】:

  • 不知道如何将JPanel 放置到JFrame,以获得更好的帮助,尽快发布SSCCE,简短,可运行,大约一个JButton(调用添加JPanelJFrame) 和 JPanel 与一个 JComponent 导致上午问题
  • 我实际上忘记了我实际代码中的remove(); 等函数。对不起,我好像脑损伤了!
  • 不接受 :-),您忘记发布 SSCCE,包括我在这里的回答在内的所有内容都一无所知,请确保问题出在您未在此处发布的其余代码中。 ..

标签: java swing events awt event-listener


【解决方案1】:
  1. 让这个程序具有不同的屏幕(由 JPanel 表示)。 每次打开屏幕时,我都会重建该面板,并将其放在 框架。

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

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

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 2021-07-30
    • 2013-10-09
    • 1970-01-01
    • 2016-01-07
    • 2018-08-04
    • 2019-11-26
    • 1970-01-01
    相关资源
    最近更新 更多