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
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
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). –