2011-05-06 3 views
0

가능한 중복 : 나는 여러 버튼, 텍스트를 입력하는 곳이있는 대화 상자를 만들기 위해 노력하고있어
Simple popup java form with at least two fields자바 (스윙) 대화 상자에 추가하는 방법?

, 나는이 튜토리얼 사용하고 등 - http://download.oracle.com/javase/tutorial/uiswing/components/dialog.html을, 하지만 여러 항목을 갖는 것에 대해서는 아무 것도 없습니다. 이것을 할 수있는 방법이 있습니까?

+2

튜토리얼의 첫 번째 페이지에는 라디오 버튼, 탭 및 누름 버튼이있는 대화 상자가 표시됩니다. 그게 "여러 항목을 가지고있는"것이 아닌가? –

+0

"표시"단추를 누를 때까지 대화 상자가 표시되지 않습니다. 표시되는 유일한 대화 상자는 이전에 표시된 간단한 대화 상자입니다. – Travis

+0

더 많은 항목이있는 [one] (http://stackoverflow.com/questions/3002787/simple-popup-java-form-with-at-least-two-fields/3002830#3002830)이지만 실행해야합니다. 그것을 볼 수 있습니다. :-) – trashgod

답변

2

많은 showXXXXDialog 메서드는 Object를 인수 중 하나로 사용합니다. Object가 String 인 경우 String을 표시합니다. 해당 Object가 버튼, 입력 필드 및 기타 위젯을 포함하는 컨테이너 인 경우 해당 객체가 표시됩니다.

http://download.oracle.com/javase/6/docs/api/javax/swing/JOptionPane.html

Parameters: 
The parameters to these methods follow consistent patterns: 


parentComponent 

이 대화 상자의 부모가 될 수있는 구성 요소를 정의 인용합니다. 은 두 가지 방법으로 사용됩니다. 즉, 프레임이 포함되어있는 프레임은 대화 상자의 프레임 부모로 사용되고이 대화 상자의 화면 좌표는 대화 상자에서 사용됩니다. 일반적으로 에서 대화 상자는 구성 요소 아래에만 으로 표시됩니다. 이 매개 변수 은 null 일 수 있습니다.이 경우 기본값 인 프레임이 부모로 사용되고 대화 상자가 화면 (L & F에 따라 다름)에 가운데에 배치됩니다.

message 

대화 상자에 표시 할 설명 메시지입니다. 가장 많이 사용되는 사용법에서 메시지는 문자열 또는 문자열 상수 일뿐입니다. 그러나 유형은 실제로 Object입니다. 그 해석은 그 유형에 따라

개체 [] 객체의 배열이 수직 스택에 배열 된 메시지 (하나의 오브젝트 당)의 시리즈로 해석 . 해석은 재귀 적입니다. 배열의 각 객체는 해당 유형에 따라 으로 해석됩니다.

구성 요소 구성 요소가 대화 상자에 표시됩니다.

아이콘 아이콘이 JLabel로 묶여 대화 상자에 표시됩니다.

기타 개체는 toString 메서드를 호출하여 String으로 변환됩니다. 결과는 JLabel로 래핑되어 표시됩니다.

+0

+1 좋은 답변. – Boro

1

두 가지 옵션이 있습니다. JOptionPane 메서드를 사용하여 Paul Tomblin에 의해 상세하게 표시된 대화 상자를 표시하거나 직접 대화 상자를 빌드하십시오.

두 번째 옵션은 대화 상자를 세밀하게 제어 한 경우 필요합니다. 다른 이름이 필요한 경우 (JOptionPane.showOptionDialog를 사용하여 수행 할 수도 있음) 대화 상자의 단추 위치 또는 모달이 아닌 대화 상자가 필요한 경우

간단한 예 :

import java.awt.Color; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 

public class DialogsTest 
{ 
    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      {    
       JPanel p = new JPanel(); 
       JPanel contentPane = new JPanel(); 
       contentPane.add(p); 
       JFrame f = new JFrame(); 
       f.setContentPane(contentPane); 
       f.setSize(400, 300); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       f.setVisible(true);   
       /* 
       * NOTE: It is not recomended to share the same instance of a component 
       * by different parents. Thought it is fine here since the first 
       * dialog will release it before the second will get it. 
       * But in a situation when we wouldn't make the 'dialog' modal and 
       * we would show it after the 'option pane dialog' it would be empty. 
       */ 
       JPanel message = new JPanel(); 
       message.add(new JLabel("Label:"));    
       message.add(new JTextField("ABCD")); 
       message.setBackground(Color.GREEN); 
       JOptionPane.showConfirmDialog(f, message, "Default made dialog", JOptionPane.YES_NO_OPTION); 

       Object[] options = new String[]{"a", "b", "c"}; 
       JOptionPane.showOptionDialog(f, message, "", JOptionPane.YES_OPTION, JOptionPane.INFORMATION_MESSAGE, 
         null, options, options[0]); 
       JDialog dialog = new JDialog(f, "Custom made dialog"); 
       dialog.setModal(true); 
       dialog.setContentPane(message); 
       dialog.pack(); 
       dialog.setLocationRelativeTo(f); 
       dialog.setVisible(true); 
      } 
     }); 
    } 
} 

가 BTW 당신이 읽을 자바 튜토리얼에서 매우 좋은 (아마 너무 부자) 예를 들어 있습니다.

관련 문제