2013-12-15 2 views
0

프로그램에서 여러 개의 showInputDialog를 사용하고 있습니다. 이 입력 중 하나가 팝업되면 입력을 수신 할 때까지 백그라운드의 다른 모든 창을 정지시킵니다. 다른 창을 고정시키지 않는 방법이 있습니까?showInputDialog 다른 창을 고정시킵니다.

답변

3

"고정"을 사용하면 사용자가 다른 창에 액세스 할 수 없다는 것을 의미하는 경우 키는 새 대화 상자를 모달이 아닌 대화 상자로 만드는 것입니다. JOptionPane에서 JDialog를 추출한 다음 모달이 아닌 방식으로 표시하도록 선택할 수 있습니다. JOptionPane API이 방법을 보여줍니다. "직접 사용 :"이라는 제목의 절을 검색하십시오.

편집 : Andrew 주에서도 마찬가지입니다! 1+


대신 JDialog 비 모달을 사용합니다 .... 코드

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ComponentAdapter; 
import java.awt.event.ComponentEvent; 

import javax.swing.*; 

public class Foo { 

    public static void main(String[] args) { 
     final JTextField textfield = new JTextField(10); 
     textfield.setFocusable(false); 
     final JPanel panel = new JPanel(); 
     panel.add(textfield); 

     panel.add(new JButton(new AbstractAction("Push Me") { 

     private JOptionPane optionPane; 
     private JDialog dialog; 
     private JTextField optionTextField = new JTextField(10); 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      if (dialog == null) { 
       JPanel optionPanel = new JPanel(new BorderLayout()); 
       optionPanel.add(new JLabel("Enter some stuff"), 
        BorderLayout.PAGE_START); 
       optionPanel.add(optionTextField, BorderLayout.CENTER); 
       optionPane = new JOptionPane(optionPanel, 
        JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION); 
       dialog = optionPane.createDialog(panel, "Get More Info"); 
       dialog.setModal(false); 
       dialog.addComponentListener(new ComponentAdapter() { 
        @Override 
        public void componentHidden(ComponentEvent arg0) { 
        Integer value = (Integer) optionPane.getValue(); 
        if (value == null) { 
         return; 
        } 
        if (value == JOptionPane.OK_OPTION) { 
         textfield.setText(optionTextField.getText()); 
        } 
        } 
       }); 
      } 
      dialog.setVisible(true); 
     } 
     })); 

     JFrame frame = new JFrame("Frame"); 
     frame.add(panel); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+1

* "직접 사용 :" "*라는 제목의 절을 찾으십시오. +1 그것은'JOptionPane'의 기능을 재현하기위한 번거 로움입니다. –

+0

나는 이것을 체크했으나 inputdialogs와 어떻게 작동하는지 보지 못했습니까? tablename = JOptionPane.showInputDialog ("tablename * (대문자 사용) 입력") 스타일로 입력 대화 상자가 있습니다. – Looptech

관련 문제