2013-08-06 5 views
0

새 창이 열리는 JDialog가있는 JDialog가 있습니다. 내가 원하는 것은 다른 창이 열릴 때마다이 JDialog를 차단하는 것입니다. 내가 블록이라고 말할 때, 사용자가 그것을 조작 할 수없고, 그것을 움직이거나 최대화하거나 아무것도 할 수 없다는 것을 의미합니다.다른 하나를 열면 JDialog를 차단하십시오.

그런데 버튼과 테이블이있는 창에는 JDialog를 사용하는 것이 좋습니다? 내가 어떤 프레임을 사용해야 할 때 나는 그것을 얻지 못한다!

이 내가있어 무엇 :

public class Platos extends JDialog { 

    private final JPanel contentPanel = new JPanel(); 

    public static void main(String[] args) { 
     try { 
      Platos dialog = new Platos(); 
      dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
      dialog.setVisible(true); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    }  

    public Platos() { 
     setBounds(100, 100, 450, 300); 
     getContentPane().setLayout(new BorderLayout()); 
     contentPanel.setLayout(new FlowLayout()); 
     contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     getContentPane().add(contentPanel, BorderLayout.CENTER); 
     { 
      JButton btnAgregarPlato = new JButton("Agregar Plato"); 
      btnAgregarPlato.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent arg0) { 
       AgregarPlato ap = new AgregarPlato(); 
       ap.setVisible(true); 
       } 
      }); 
      btnAgregarPlato.setFont(new Font("Tahoma", Font.PLAIN, 11)); 
      contentPanel.add(btnAgregarPlato); 
     } 
    }  
} 

답변

3

JDialog를 참으로 최적의 선택이 될 것입니다. 그것은 부모 창을 차단 만들려면

, 당신은 부모 프레임으로 JDialog 생성자를 활용하는 것이다, Platos에 생성자를 추가해야합니다 : parentWindow는 일반적으로 JFrame의

JDialog dlg = new JDialog(parentWindow, modality); 

입니다.

당신은 이런 식으로 작업을 수행합니다

public Platos(JFrame parent) { 
    super(parent, ModalityType.APPLICATION_MODAL); 
    .... 

트릭은 다른 모든 대화 상자를 메인 프레임을 당신의 대화 블록을 만드는 ModalityType.APPLICATION_MODAL 인수입니다.

주 창 부모로 전달할 수 있습니다. 다른 창에서 대화 상자를 여는 경우에도 정상적으로 작동합니다. 마지막 창은 이전 창을 모두 차단합니다.


자세한 내용은 docs을 참조하십시오.

관련 문제