例如,我在点击时创建这个
//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);
}
});
将变量全局存储一点,并在创建新变量之前检查它是否存在。
您也可以考虑将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;
}
}
使用布尔标志来指示对话框是否打开。如果弹出对话框,请将其设置为true,关闭该对话框时,请将它设置为false。
如果每次单击都要创建带有"new"的内容,那么每次都会得到一个新窗口。一种解决方案是在任何点击发生之前创建autor,然后让事件将其从隐藏移动到可见。