有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java标识是否已打开JDialog

如何识别JDialog组件是否已经打开,从而避免在同一个应用程序实例中打开同一个JDialog两次

我想到的一个解决方案是验证一个对象是否已经是JDialog实例(dialogObj instanceof JDialog),如果是,我只调用负责其构造/展示的方法,如果不是,我只创建一个新的JDialog实例(如果我有错觉,请免费填写以纠正我)

假设我创建了一个JDialog,其中包含一(1)个JPanel、一(1)个JTextField、一(1)个JButton和一个JMenuItem->;jpopmpmenu->;TrayIcon(系统托盘图标)

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

这里有没有人知道如何解决这个问题(当然有)


共 (3) 个答案

  1. # 1 楼答案

    作为一个变体,这里只是另一个基本概念(未经测试)

    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
    

    所以它也可以被使用

    祝你好运

  2. # 2 楼答案

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

  3. # 3 楼答案

    将这两项任务作为

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

    您只需将模态JDialog用作

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

    。。。这将不允许用户初始化另一个JDialog示例:)

    祝你好运