2010-05-28 4 views
0

그래서 저는 Creating Java dialogs 작업으로 계속 싸우고 있습니다. 이제 JOptionPane이 봉투가 너무 커서 새 창이 열리지 만이 창 크기를 변경할 수 없습니다. 또한 발신자의 데이터를 왼쪽 위 모서리에, 수신기의 데이터를 오른쪽 하단에 갖기를 원했습니다. 어떻게하면 될까요? OptionPane 자체에도 문제가 있습니다. '확인'을 클릭하면 화면의 왼쪽 상단에 작은 창이 열립니다. 이게 뭐야, 왜 나타나고있는거야?
내 코드 : 당신이에 대한 옵션 대화 상자를 사용하는 대신 자신의 JFrame의를 생성해서는 안처럼다른 JFrame을 여는 JOptionPane

import java.awt.*; 
import java.awt.Font; 
import javax.swing.*; 

public class Main extends JFrame { 

    private static JTextField nameField = new JTextField(20); 
    private static JTextField surnameField = new JTextField(); 
    private static JTextField addr1Field = new JTextField(); 
    private static JTextField addr2Field = new JTextField(); 
    private static JComboBox sizes = new JComboBox(new String[] { "small", "medium", "large", "extra-large" }); 

    public Main(){ 
     JPanel mainPanel = new JPanel(); 
     mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); 
     getContentPane().add(mainPanel); 

     JPanel addrPanel = new JPanel(new GridLayout(0, 1)); 
     addrPanel.setBorder(BorderFactory.createTitledBorder("Receiver")); 
     addrPanel.add(new JLabel("Name")); 
     addrPanel.add(nameField); 
     addrPanel.add(new JLabel("Surname")); 
     addrPanel.add(surnameField); 
     addrPanel.add(new JLabel("Address 1")); 
     addrPanel.add(addr1Field); 
     addrPanel.add(new JLabel("Address 2")); 
     addrPanel.add(addr2Field); 
     mainPanel.add(addrPanel); 
     mainPanel.add(new JLabel(" ")); 
     mainPanel.add(sizes); 

     String[] buttons = { "OK", "Cancel"}; 

     int c = JOptionPane.showOptionDialog(
       null, 
       mainPanel, 
       "My Panel", 
       JOptionPane.DEFAULT_OPTION, 
       JOptionPane.PLAIN_MESSAGE, 
       null, 
       buttons, 
       buttons[0] 
     ); 

     if(c ==0){ 
      new Envelope(nameField.getText(), surnameField.getText(), addr1Field.getText() 
        , addr2Field.getText(), sizes.getSelectedIndex()); 
     } 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new Main(); 
    } 
} 

class Envelope extends JFrame { 

    private final int SMALL=0; 
    private final int MEDIUM=1; 
    private final int LARGE=2; 
    private final int XLARGE=3; 

    public Envelope(String n, String s, String a1, String a2, int i){ 
     Container content = getContentPane(); 

     JPanel mainPanel = new JPanel(); 
     mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); 
     mainPanel.add(new JLabel("John Doe")); 
     mainPanel.add(new JLabel("FooBar str 14")); 
     mainPanel.add(new JLabel("Newark, 45-99")); 

     JPanel dataPanel = new JPanel(); 
     dataPanel.setFont(new Font("sansserif", Font.PLAIN, 32)); //set size from i 
     mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); 
     mainPanel.setBackground(Color.ORANGE); 
     mainPanel.add(new JLabel("Mr "+n+" "+s)); 
     mainPanel.add(new JLabel(a1)); 
     mainPanel.add(new JLabel(a2)); 

     content.setSize(450, 600); 
     content.setBackground(Color.ORANGE); 
     content.add(mainPanel, BorderLayout.NORTH); 
     content.add(dataPanel, BorderLayout.SOUTH); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
     setVisible(true); 
    } 
} 

Main http://img62.imageshack.us/img62/3619/mainscreensnapz001.jpg

alt text http://img24.imageshack.us/img24/8946/mainscreensnapz002.jpg

alt text http://img571.imageshack.us/img571/1621/mainscreensnapz003.jpg

+1

나는 owca가 이미 당신에게 아주 좋은 푸시를 주었다고 생각합니다. 이번에는 좀 더 열심히 노력하지 마세요. 또한 가지고있는 스크린 샷과 유용 할만한 스크린 샷을 포함하여 코드를 복사하여 복사 할 필요가 없습니다. – OscarRyz

+0

그냥 내가 편집 할 수 없다는 것을 깨달았다. [Main] (http://img62.imageshack.us/img62/3619/mainscreensnapz001.jpg), [바로 ​​뒤에 오는 것] (http://img24.imageshack.us/img24/8946/mainscreensnapz002.jpg), [조금씩 확대] (http://img571.imageshack.us/img571/1621/mainscreensnapz003.jpg). –

답변

0

는 소리.

1

이제 내 JOptionPane이 봉투 오버 뷰를 사용하여 새 창을 열지 만이 창 크기를 변경할 수 없습니다. 당신이 트레이 대신

이 또한 내가 왼쪽 상단 모서리에 보낸 사람의 데이터 및 오른쪽 아래에있는 수신기의 데이터를하고 싶었되는 JDialog 또는 JFrame의를 사용하여,위한 JOptionPane를 사용하고 있기 때문이다

. 어떻게하면 될까요?

어떻게 할 수 있다고 생각하십니까?

OptionPane 자체에도 문제가 있습니다. '확인'을 클릭하면 화면의 왼쪽 상단에 작은 창이 열립니다. 이게 뭐야, 왜 나타나고있는거야?

이것은 사용자의 코드이므로 잘 알아야합니다. 그것은 "새로운 봉투 ..."의 코드입니다.

관련 문제