2014-05-18 6 views
2

JDialog의 잘못된 사용자 입력에 의해 호출되는 오류 메시지로 JOptionpane을 사용했습니다.JDialog 위에 Joptionpane이 모달이 아닌 이유

모덜 유형 : 응용 모달
modalExclusionType : JOptionPane에이 JDialog를 여전히 작동 나타날 때 APPLICATION_EXCLUDE

는 문제입니다. 다음 JOptionPane에

JOptionPane.showMessageDialog(JDialog's name, "you must fill in all required fields", "Error!", 0); 

를 호출하는 코드는이 문제를 해결하기 위해 어떤 방법이 무엇입니까? 여기

는 최소한의 예제 프로그램을 것입니다

import javax.swing.JOptionPane; 


public class Modality extends javax.swing.JFrame { 


    public Modality() { 
     initComponents(); 
    } 


    private void initComponents() { 

     jDialog1 = new javax.swing.JDialog(); 
     jTextField1 = new javax.swing.JTextField(); 
     jButton2 = new javax.swing.JButton(); 
     jLabel1 = new javax.swing.JLabel(); 
     jButton1 = new javax.swing.JButton(); 

     jDialog1.setModalExclusionType(java.awt.Dialog.ModalExclusionType.APPLICATION_EXCLUDE); 
     jDialog1.setModalityType(java.awt.Dialog.ModalityType.APPLICATION_MODAL); 

     jButton2.setText("JOptionpane"); 
     jButton2.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton2ActionPerformed(evt); 
      } 
     }); 

     jLabel1.setText("Type in the textfield while the jdialog is visible"); 

     javax.swing.GroupLayout jDialog1Layout = new javax.swing.GroupLayout(jDialog1.getContentPane()); 
     jDialog1.getContentPane().setLayout(jDialog1Layout); 
     jDialog1Layout.setHorizontalGroup(
      jDialog1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jDialog1Layout.createSequentialGroup() 
       .addGroup(jDialog1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(jDialog1Layout.createSequentialGroup() 
         .addGap(109, 109, 109) 
         .addComponent(jButton2)) 
        .addGroup(jDialog1Layout.createSequentialGroup() 
         .addGap(76, 76, 76) 
         .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 154, javax.swing.GroupLayout.PREFERRED_SIZE)) 
        .addGroup(jDialog1Layout.createSequentialGroup() 
         .addGap(50, 50, 50) 
         .addComponent(jLabel1))) 
       .addContainerGap(82, Short.MAX_VALUE)) 
     ); 
     jDialog1Layout.setVerticalGroup(
      jDialog1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jDialog1Layout.createSequentialGroup() 
       .addGap(111, 111, 111) 
       .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(18, 18, 18) 
       .addComponent(jButton2) 
       .addGap(18, 18, 18) 
       .addComponent(jLabel1) 
       .addContainerGap(96, Short.MAX_VALUE)) 
     ); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jButton1.setText(" View JDialog"); 
     jButton1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton1ActionPerformed(evt); 
      } 
     }); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(97, 97, 97) 
       .addComponent(jButton1) 
       .addContainerGap(122, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(101, 101, 101) 
       .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(105, Short.MAX_VALUE)) 
     ); 

     pack(); 
    }// </editor-fold> 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 

     jDialog1.pack(); 
     jDialog1.setVisible(true); 
    } 

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 

     JOptionPane.showMessageDialog(jDialog1, "Hello World! What's wrong with focus?"); 
    } 



    public static void main(String args[]) { 


     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(Modality.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(Modality.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(Modality.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(Modality.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 


     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new Modality().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify 
    private javax.swing.JButton jButton1; 
    private javax.swing.JButton jButton2; 
    private javax.swing.JDialog jDialog1; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JTextField jTextField1; 

} 
+0

코드가 컴파일 되나요? –

+0

예. 모달 문제 이외에는 괜찮습니다. – Epsilon

+0

정말요? :'JOptionPane.showMessageDialog (JDialog 이름,'은 나에게 조금 비현실적입니다.이 방법으로 메소드를 호출 할 수는 없지만 [ 작은 컴파일 가능한 예제 프로그램] (http://stackoverflow.com/help/mcve) –

답변

2

문제는 여기에 있습니다 :

modalExclusionType : 윈도우 API 당 APPLICATION_EXCLUDE

:

지정 이 윈도우의 모달 제외 유형 모달이 제외 된 모달은 일부 모달 대화 상자에 의해 차단되지 않습니다. 가능한 모달 제외 유형은 Dialog.ModalExclusionType을 참조하십시오.

이 값을 설정하지 않으면 JOptionPane이 대화 상자 창을 제대로 차단합니다.

+0

대단히 감사합니다! – Epsilon