我正在使用不同的类:一个包含一个带有按钮的主 JFrame,另一个包含一个在按下按钮时调用的新 JFrame。
if( event.getSource() == noteBtn ) { MiniPad.pad(); return;}
(MiniPad.pad() 引用新 JFrame 上的类和 pad() 方法)
当我在托管按钮的 JPanel 上使用 removeAll(),然后使用 revalidate() 和 repaint() 时,按钮多次打开 JFrame,这根本不是我想要的。
有没有办法告诉 MiniPad 类您不能同时打开多个 JFrame 副本?顺便说一句,我扩展了 JFrame,以防有任何帮助。
最佳答案
编辑:以下所有内容都是有效的编程知识,但您可能还想考虑让 MiniPad
扩展 JDialog
类。我以前没有用过它,但它的实现看起来很像JFrame
。实际上,您可能不必在 MiniPad
类中进行太多更改。文档在这里:http://docs.oracle.com/javase/7/docs/api/javax/swing/JDialog.html
如果您想知道为什么,请查看 Andrew Thompson 的帖子 here .
--
根据我对你问题的理解,MiniPad
扩展了 JFrame
,pad()
方法创建了 的新实例>MiniPad
类。最简单的解决方案是将 MiniPad
类(至少通过 pad()
方法)变成单例。单例是一种在任何给定时间只能存在一个实例(或对象)的类。通过调用静态方法(在本例中为 pad()
),您可以检查该对象的实例是否已经存在;如果是这样,只需使用该现有对象:
public class MiniPad extends JFrame {
//whatever code you have
private static MiniPad padInstance = null; //the singleton instance of your MiniPad
public static MiniPad pad() {
if(padInstance == null)
padInstance = new MiniPad();
//If you want to reset the object every time you call the method for whatever reason, do it here
pad.setVisible(true); // I believe this is all you want to do
}
}
这应该做你想做的。通过调用 pad()
方法,只会出现一个 MiniPad
。
但是,如果我读错了你的问题,请告诉我,我会修改我的答案。
关于java - 按钮多次打开新的 JFrame。我该如何阻止呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11951123/