Определите, открыт ли JDialog - PullRequest
3 голосов
/ 19 июля 2011

Как определить, открыт ли компонент JDialog или нет, таким образом, можно было бы избежать повторного открытия одного и того же JDialog в одном и том же экземпляре приложения?

Одним из решений, которое я имел в виду, было проверить, является ли объект уже экземпляром JDialog (dialogObj instanceof JDialog), если это так, я просто вызываю метод, отвечающий за его построение / выставку, если нет, я просто создаю новый JDialog экземпляр (заполните бесплатно, чтобы исправить меня, если я бреду).

Давайте предположим, что я создал JDialog, содержащий один (1) JPanel, один (1) JTextField, один (1) JButton и элемент, который содержит событие, которое будет «отображать» JDialog каждый раз, когда JMenuItem -> JPopUpMenu -> TrayIcon (значок в системном трее).

Я почти нашел способ ее решения (как показано во втором абзаце), однако, когда я снова открываю его через системный трей, все, что я набрал до того, как я «удалил» диалоговое окно появляется снова, не говоря уже о статусе других элементов, который остается прежним (JButton включен и т. д. - это другая история).

Кто-нибудь здесь знает, как ее решить (конечно, это так)?

Ответы [ 3 ]

2 голосов
/ 19 июля 2011

Чтобы решить обе задачи как

  • A) Инициируйте только ОДИН JDialog
  • B) Для проверки открыта

Вы можете просто использовать модальный JDialog как

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

... это не позволит пользователю инициировать другой пример JDialog:)

Удачи

2 голосов
/ 19 июля 2011

Если у вас есть доступ к экземпляру JDialog, вы можете просто вызвать isVisible (). Если он показывает, это будет верно.

0 голосов
/ 20 июля 2011

В качестве варианта здесь приведена еще одна базовая концепция (не тестировалась) ...

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

Так чтоможно также использовать

Удачи

...