防止java在同一窗口框架中打开多个窗口

防止java在同一窗口框架中打开多个窗口,java,jframe,actionlistener,Java,Jframe,Actionlistener,例如,我在单击时创建它 //this creates autor object with default constructor properties defined in autor class menuAutor.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e) { autor Autor = new autor

例如,我在单击时创建它

//this creates autor object with default constructor properties defined in autor class
menuAutor.addMouseListener(new MouseAdapter(){
            public void mouseClicked(MouseEvent e)
            {
                autor Autor = new autor("Autor");
            }
        });
因此,名为Autor的对象被创建,当我再次单击按钮时,它会再次弹出相同的Autor对象。。如果已经打开了一个窗口,如何防止打开同一个窗口

编辑:最后一个解决方案! 在考虑了这么多之后。。我提出了我的解决方案。。。 autorOpen=no的默认值我在我的类开始时声明,只是想让您知道,因为它在下面的代码中不可见,解决方案本身:

public void mouseClicked(MouseEvent e)
            {
                if(autorOpen=="no") {
                autor Autor = new autor("Autor");
                autorOpen = "yes";
                Autor.addWindowListener(new WindowAdapter(){
                    public void windowClosing(WindowEvent e) 
                    {
                        autorOpen = "no";
                    }
                });
                }
                else 
                    JOptionPane.showMessageDialog(null, "Demo notice... you can't open that window again.. its opened already!","Error",JOptionPane.ERROR_MESSAGE);  
            }
        });

将变量更全局地存储一点,并在创建新变量之前检查它是否存在。

将变量更全局地存储一点,并在创建新变量之前检查它是否存在。

使用布尔标志指示对话框是否启动。如果弹出对话框,则将其设置为true,关闭该对话框时将其设置为false。

使用布尔标志指示对话框是否打开。如果弹出对话框,则将其设置为true,关闭该对话框时将其设置为false。

如果每次单击都要创建带有“新建”的内容,则每次都会得到一个新窗口。一种解决方案是在任何单击发生之前创建autor,然后让事件将其从隐藏状态移动到可见状态。

如果您在每次单击时都创建带有“新建”的内容,则每次都会得到一个新窗口。一种解决方案是在发生任何点击之前创建AutoR,然后将事件从隐藏移动到可见。

< P>您也可以考虑将Autor作为一个单独的类来实现,以确保只有一个被实例化。
public class Autor {

private static Autor instance = null;

//Must be protected or private, get a reference to this class with getInstance().
protected Autor() {
}


/**
* Returns reference to this class - use in place of constructor
*/
public static Autor getInstance() {
if(instance == null) {
instance = new Autor();
}
return instance;
}
}

您还可以考虑将Autor作为单级类来实现,以确保只例示一个类。

public class Autor {

private static Autor instance = null;

//Must be protected or private, get a reference to this class with getInstance().
protected Autor() {
}


/**
* Returns reference to this class - use in place of constructor
*/
public static Autor getInstance() {
if(instance == null) {
instance = new Autor();
}
return instance;
}
}

是JFrame的Autor子类吗?boolean open=false。。。如果open{open=true;autor autor=…}。你的命名约定很奇怪。@khachik,如果autor可以关闭自己,那就行不通了。关于你实现我的想法:哇,太乱了。1如果要使用是/否,请使用布尔值。2您应该真正存储实际的自动对象。如果用户关闭窗口怎么办?自动打开仍然是正确的。如果存储了实际对象,则可以说myAutor==null | | myAutor.isOpen==false myAutor=newautor@TomvanderWoerdt,我没有提到开放的定义;是JFrame的Autor子类吗?boolean open=false。。。如果open{open=true;autor autor=…}。你的命名约定很奇怪。@khachik,如果autor可以关闭自己,那就行不通了。关于你实现我的想法:哇,太乱了。1如果要使用是/否,请使用布尔值。2您应该真正存储实际的自动对象。如果用户关闭窗口怎么办?自动打开仍然是正确的。如果存储了实际对象,则可以说myAutor==null | | myAutor.isOpen==false myAutor=newautor@TomvanderWoerdt,我没有提到开放的定义;听起来很有趣,我会去看看的。我以前怎么没教过这件事。。英雄联盟但我会等待更多的答案,也许有人有不同的解决方案。我猜有些人可能会说在更全局的范围内使用布尔值。。。但在这种情况下,你也可以将整个对象存储在那里,因为它允许你检查它是否仍然处于活动状态。听起来很有趣,你会检查它。我以前怎么没教过这件事。。英雄联盟但我会等待更多的答案,也许有人有不同的解决方案。我猜有些人可能会说在更全局的范围内使用布尔值。。。但在这种情况下,您也可以将整个对象存储在那里,因为它允许您检查它是否仍然处于活动状态。