2012-03-19 8 views
5

Tengo un marco principal y un segundo marco y un diálogo modal con el marco principal como principal.Cómo dejar que Modal Dialog no bloquee mi segundo nivel superior Marco

Pero ahora ambos cuadros están bloqueados por el cuadro de diálogo modal.
¿Cómo puedo dejar el segundo marco accesible mientras que el marco principal tiene un cuadro de diálogo modal?

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); 
      } 
     }); 
    } 

} 

Respuesta

8

necesita configurar el campo de modalidad para documentar.

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

+1, ver también [El AWT Modalidad] (http://docs.oracle.com/javase/7/docs/api/java/awt/doc-files/Modality.html) – aterai

Cuestiones relacionadas