Java 按钮多次打开新JFrame。我该怎么阻止这一切?

Java 按钮多次打开新JFrame。我该怎么阻止这一切?,java,swing,window,jframe,jpanel,Java,Swing,Window,Jframe,Jpanel,我已经习惯了不同的类:一个是拿着一个带按钮的主JFrame,另一个是拿着一个新的JFrame,按下按钮就会调用它 if( event.getSource() == noteBtn ) { MiniPad.pad(); return;} (MiniPad.pad()引用新JFrame上的类和pad()方法) 当我在承载该按钮的JPanel上移除all()后,再移除revalidate()和repaint(),该按钮会多次打开JFrame,这根本不是我想要它做的 有没有办法告诉MiniPad类在任

我已经习惯了不同的类:一个是拿着一个带按钮的主JFrame,另一个是拿着一个新的JFrame,按下按钮就会调用它

if( event.getSource() == noteBtn ) { MiniPad.pad(); return;}
(MiniPad.pad()引用新JFrame上的类和pad()方法)

当我在承载该按钮的JPanel上移除all()后,再移除revalidate()和repaint(),该按钮会多次打开JFrame,这根本不是我想要它做的


有没有办法告诉MiniPad类在任何时候都不能打开JFrame的多个副本?顺便说一下,我扩展了JFrame,以防有帮助。

最好的解决方案是打开一个而不是框架。有关详细信息,请参阅。

最好的解决方案是打开一个框架,而不是打开框架。请参阅更多内容。

< P>编辑:下面的所有内容都是有效的编程知识,但您可能还想考虑<代码> MIPiPad >扩展<代码> jCalue类。我以前没有使用过它,但是它的实现看起来很像
JFrame
。实际上,您可能不需要在
MiniPad
类中做太多更改。文件如下:

如果你想知道为什么,看看安德鲁·汤普森的帖子

--

根据我对您问题的理解,
MiniPad
扩展了
JFrame
,并且
pad()
方法创建了
MiniPad
类的一个新实例。最简单的解决方案是将
MiniPad
类(至少通过
pad()
方法)转换为单例。singleton是一种在任何给定时间只能存在一个实例(或对象)的类。通过调用静态方法(在本例中为
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

但是,如果我看错了你的问题,请告诉我,我会修改我的答案

单身人士资料:
编辑:下面的所有内容都是有效的编程知识,但是你也可以考虑使用<代码> MIPiPad 来代替<代码> jCalue类。我以前没有使用过它,但是它的实现看起来很像
JFrame
。实际上,您可能不需要在
MiniPad
类中做太多更改。文件如下:

如果你想知道为什么,看看安德鲁·汤普森的帖子

--

根据我对您问题的理解,
MiniPad
扩展了
JFrame
,并且
pad()
方法创建了
MiniPad
类的一个新实例。最简单的解决方案是将
MiniPad
类(至少通过
pad()
方法)转换为单例。singleton是一种在任何给定时间只能存在一个实例(或对象)的类。通过调用静态方法(在本例中为
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

但是,如果我看错了你的问题,请告诉我,我会修改我的答案

单身人士资料:

您如何知道机架已关闭?如果您正在等待它关闭,您可以使用一个布尔值来指示框架是否打开。这可以让您了解一些情况,尽管不要使用两个
JFrame
s,而是坚持使用一个
JFrame multiple JDialog
y,正如@andrewhompson:-)所建议的那样,您如何知道框架已关闭?如果您正在等待它关闭,您可以使用布尔值来指示框架是否打开。这可以让您了解一些情况,尽管不要使用两个
JFrame
s,而是坚持使用一个
JFrame multiple JDialog
这一点,正如@andrewhompson:-)所建议的那样。请您阅读这里一张顶级海报的建议,请再说一遍,你有没有读过这里一张顶级海报上的建议