Java 使用Singleton时,Swing组件错误地放置在JFrame上
假设我有一个Java 使用Singleton时,Swing组件错误地放置在JFrame上,java,swing,singleton,jframe,Java,Swing,Singleton,Jframe,假设我有一个JFrame,它是通过如下单例模式创建的: private static Dist2PuncteFrame instance = null; public static Dist2PuncteFrame getInstance() { if (instance == null) instance = new Dist2PuncteFrame(); return instance; } 我通过一个JMenuItem调用它,如下所示: dist2Pc
JFrame
,它是通过如下单例模式创建的:
private static Dist2PuncteFrame instance = null;
public static Dist2PuncteFrame getInstance() {
if (instance == null)
instance = new Dist2PuncteFrame();
return instance;
}
我通过一个JMenuItem
调用它,如下所示:
dist2PcteItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dist2PcteFrame = Dist2PuncteFrame.getInstance();
dist2PcteFrame.setSomeParameters(blablabla);
dist2PcteFrame.init();
}
});
没什么复杂的。第二次打开窗口时出现问题。我的关闭按钮和两个输入标签似乎在移动(标签左/右、按钮上/下) 我有一些帧被称为完全相同的方式,它们没有这个问题。
有人知道问题出在哪里吗?
我正在使用NetBeans 7.1。是否可能违反EDT?尽快查看更好的帮助,发布一个。如果没有看到您的代码,就不可能有人知道发生了什么。是的,发布您的代码-看起来您每次都在构建GUI,因此在单个框架中有多个GUI控件实例。尝试暂时删除单例检查(注释:“if(instance==null)”)以验证这一点。init()的作用是什么?它是否添加了控件?它一定是在做一些影响渲染的事情,我知道了。我的
init()
方法初始化组件(result=new JLabel()
等),并调用addListeners()和createLayout()方法。解决方案是在init()
中的所有内容之前添加getContentPane().removeAll()
。