2015-07-07 6 views
1

Ситуация такова:Запустить приложение как диалоговое окно, которое вызывает родительский кадр

Мое приложение состоит из диалогового окна, содержащего элементы x и кнопку. Пользователь нажимает кнопку после взаимодействия с элементами, и если он взаимодействует с ними определенным образом, только тогда должен появиться родительский кадр, в котором находится диалоговое окно.

Для этой цели, я в настоящее время знаю такого подхода:

public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new NewJFrame().setVisible(false); 
       jDialog.setVisible(true); 
      } 
     }); 
    } 

А затем добавить эту команду на кнопку, которая находится внутри JDialog:

new NewJFrame().setVisible(true); 

Это делает трюк довольно хорошо и аккуратно, но предыдущий экземпляр с именем new NewJFrame().setVisible(false); все еще работает (насколько я знаю).

Не в любом случае я мог бы выполнить это действие на кнопку (проживание в JDialog) прессе, используя что-то вроде:

NewJFrame.setVisible(true); 

(В настоящее время он дает мне ошибку: Non-static method cannot be referenced from static context)

ответ

2

Убедитесь, что диалоговое окно является модальным, и вы можете просто сделать:

public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      NewJFrame newJFrame = new NewJFrame(); 
      newJFrame.pack(); 
      // no need to set visible false. It already is 

      MyDialog myDialog = new MyDialog(newJFrame); 
      // make sure the super constructor makes the dialog modal 

      myDialog.pack(); 
      myDialog.setVisible(true); 

      // here the dialog is no longer visible 
      // and we can extract data from it and send it to the JFrame if needed 

      newJFrame.setVisible(true); // ****** here 
     } 
    }); 
} 

в противном случае, если вы абсолютно необходимо возиться с JFrame внутри JDialog, просто передать NewJFrame в конструктор JDialog, что вам нужно делать независимо от того, как он должен использоваться в суперструктуре JDialog, использовать его для установки поля NewJFrame и вызвать setVisible(true) в экземпляре внутри вашего диалога.