2012-03-19 5 views
5

Ho un frame principale e un secondo frame e una finestra di dialogo modale con il frame principale come padre.Come lasciare che la finestra di dialogo modale non blocchi il mio secondo frame di primo livello

Ma ora entrambi i frame sono bloccati dalla finestra di dialogo modale.
Come posso rendere accessibile il secondo frame mentre il frame principale ha una finestra di dialogo modale?

public class Example extends JFrame { 

    public Example() { 
     super("MainFrame"); 

     JButton btn1 = new JButton(new AbstractAction("Frame") { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       EventQueue.invokeLater(new Runnable() { 
        @Override 
        public void run() { 
         JFrame f = new JFrame("Frame"); 
         f.getContentPane().add(new JLabel("This shoud be not blocked by ModalDialog.")); 
         f.setLocation(50, 200); 
         f.setSize(300, 200); 
         f.setVisible(true); 
        } 
       }); 
      } 
     }); 

     JButton btn2 = new JButton(new AbstractAction("Modal") { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       EventQueue.invokeLater(new Runnable() { 
        @Override 
        public void run() { 
         JDialog d = new JDialog(Example.this, "Dialog"); 
         d.getContentPane().add(new JLabel("This shoud block only MainFrame.")); 
         d.setModal(true); 
         d.setLocation(50, 100); 
         d.setSize(300, 200); 
         d.setVisible(true); 
        } 
       }); 
      } 
     }); 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     getContentPane().setLayout(new BorderLayout()); 
     getContentPane().add(btn1, BorderLayout.NORTH); 
     getContentPane().add(new JLabel("MainFrame"), BorderLayout.CENTER); 
     getContentPane().add(btn2, BorderLayout.SOUTH); 
     setLocation(50, 50); 
     setSize(200, 150); 

     btn1.doClick(); 
     btn2.doClick(); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Example().setVisible(true); 
      } 
     }); 
    } 

} 

risposta

8

è necessario impostare il campo di modalità sul documento.

JDialog d = new JDialog(Example.this, "Dialog" ,Dialog.ModalityType.DOCUMENT_MODAL); 
+2

+1, vedi anche [AWT Modalità] (http://docs.oracle.com/javase/7/docs/api/java/awt/doc-files/Modality.html) – aterai

Problemi correlati