确定JDialog是否已经打开

时间:2011-07-19 14:57:30

标签: java swing jdialog

如何识别JDialog组件是否已经打开,因此,它可以避免在同一个应用程序实例中打开两次相同的JDialog?

我想到的一个解决方案是验证对象是否已经是JDialog实例(dialogObj instanceof JDialog),如果是这样,我只是调用负责其构造/展示的方法,如果没有,我只是创建一个新的JDialog实例(如果我是妄想,请随意纠正我)。

假设我创建了一个JDialog,其中包含一(1)个JPanel,一(1)个JTextField,一(1)个JButton以及保存事件的元素,每次都将“显示”JDialog是一个JMenuItem - &gt ; JPopUpMenu - > TrayIcon(系统托盘图标)。

我几乎找到了一种方法来解决它(如第二段所示),然而,当我再次通过系统托盘打开它时,在我“处理”对话框之前我输入的所有内容再次出现,更不用说其他元素状态保持不变(JButton启用等 - 它的另一个故事)。

这里有没有人知道如何解决它(当然是这样)?

3 个答案:

答案 0 :(得分:2)

如果您有权访问JDialog实例,那么您只需调用isVisible()即可。如果它显示,这将是真的。

答案 1 :(得分:2)

将这两项任务解决为

  • A)初始化只有一个JDialog
  • B)检查是否已打开

您可以简单地使用模态JDialog作为

JDialog aDialog=new JDialog();
aDialog.setModal(true);

...这不会让用户初始化另一个JDialog示例:)

祝你好运

答案 2 :(得分:0)

这里的变化只是另一个基础概念(未经测试)......

public class MyDialog extends JDialog
{

private boolean isOpen;

public MyDialog()
{

  this.setOpenStatus(true) ;      

}

private void setOpenStatus(boolean isOpen)
{
 this.isOpen=isOpen;
}

public boolean isDialogOpen(){return this.isOpen;}

}

//你的基础应用程序深处的某个地方...

public class aClass{

private MyDialog aDialog;//field



public void actionPerformed(ActionEvent e)
{

  if(e.getActionCommand().equals("DIALOG_OPEN"))
{
    if(this.aDialog.isDialogOpen())
     {
       System.out.println("Dialog is opened"); return;
     }

    if(!this.aDialog.isDialogOpen())
    {
      this.aDialog=new MyDialog();
      this.aDialog.addWindowListener(...);
      //set JDialog options...
    }
}


}

}//end aClass

所以它也可以使用

祝你好运