2010-05-28 5 views
0

Donc je continue mon combat avec cette tâche: Creating Java dialogs. Maintenant, mon JOptionPane ouvre une nouvelle fenêtre avec overfiew d'enveloppe, mais je ne peux pas changer la taille de cette fenêtre. Je voulais aussi avoir les données de l'expéditeur dans le coin supérieur gauche, et les données du destinataire en bas à droite. Comment puis-je y parvenir? Il y a aussi un problème avec OptionPane lui-même. Après avoir cliqué sur 'OK', il ouvre une petite fenêtre dans le coin supérieur gauche de l'écran. Qu'est-ce que c'est et pourquoi ça apparaît?
Mon code:JOptionPane l'ouverture d'un autre JFrame

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

Je pense que owca vous a déjà donné un très bon coup de pouce. Avec tu n'essaies pas un peu plus dur cette fois. En outre, y compris des captures d'écran de ce que vous avez et ce que vous voulez peut-être utile, afin que nous ne devions pas copier coller votre code pour voir. – OscarRyz

+0

Je viens de réaliser que je ne peux pas éditer sur SO. [Main] (http://img62.imageshack.us/img62/3619/mainscreensnapz001.jpg), [ce qui revient juste après] (http://img24.imageshack.us/img24/8946/mainscreensnapz002.jpg), [développant un peu les deux] (http://img571.imageshack.us/img571/1621/mainscreensnapz003.jpg). –

Répondre

0

On dirait que vous ne devriez pas utiliser une boîte de dialogue d'options pour cela, mais au lieu de créer votre propre JFrame.

1

Maintenant, mon JOptionPane ouvre une nouvelle fenêtre avec une surimpression d'enveloppe, mais je ne peux pas changer la taille de cette fenêtre.

C'est parce que vous utilisez JOptionPane, plateau à l'aide JDialog ou JFrame à la place

Aussi je voulais avoir les données de l'expéditeur dans le coin supérieur gauche, et les données du récepteur en bas à droite. Comment puis-je y parvenir?

Comment croyez-vous que vous pouvez faire cela?

Il y a également un problème avec OptionPane lui-même. Après avoir cliqué sur 'OK', il ouvre une petite fenêtre dans le coin supérieur gauche de l'écran. Qu'est-ce que c'est et pourquoi ça apparaît?

C'est votre code, vous devriez savoir mieux. C'est le code dans "new Envelope ..."