2012-01-26 2 views
3

Я понимаю, что когда родительский JFrame сведен к минимуму, его дети также сведены к минимуму, но в следующем простом примере это не происходит (то есть дочерний диалог остается видимым, когда сшабит jframe). Я что-то упускаю?Почему этот немодальный дочерний JDialog не сведен к минимуму, когда родительский JFrame?

public class Test 
{ 
    private JFrame f1; 
    private JDialog d2; 

    private void createAndShowGUI() 
    { 
     f1 = new JFrame("(parent frame)"); 
     f1.addWindowListener(new WindowAdapter() 
     { 
      public void windowClosing(WindowEvent e) 
      { 
       e.getWindow().dispose(); 
      } 
     }); 
     f1.setBounds(32, 32, 300, 200); 
     d2 = new JDialog(f1, "child dialog"); 
     d2.setBounds(100, 100, 300, 200); 
     d2.setVisible(true); 
     f1.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     // Schedule a job for the event-dispatching thread: 
     // creating and showing this application's GUI. 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       Test test = new Test(); 
       test.createAndShowGUI(); 
      } 
     }); 
    } 
} 

Спасибо!

+0

Ваш код отлично подходит для меня - Windows 7, Java 1.6. –

+0

Работает для меня тоже. JDK6u30 Mac –

+0

То же самое здесь. Также рассмотрите 'setDefaultCloseOperation()'. – trashgod

ответ

0

Попробуйте получить Window [] и закройте все их ... Возможно, это работает в каждой ОС.

private void createAndShowGUI() { 
    f1 = new JFrame("(parent frame)"); 
    f1.addWindowListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent e) { 
      Window[] windows = e.getWindow().getOwnedWindows(); 
      for (Window window : windows) { 
       window.dispose(); 
      } 
     } 
    });