In dem folgenden Code, wenn ein JPanel nicht zur Erweiterung JFrame hinzugefügt wird, funktioniert das Programm gut, aber dann habe ich den JPanel auskommentiert und das GridLayout verwendet, alles ist richtig und schön auf dem JFrame platziert. Könnte es Einschränkungen geben, wie JPanel Objekte anzeigt? Im Code Ich habe die folgenden Aussagen auf Kommentar:Alle JPanel-Einschränkungen in Java?
this.setLayout(new GridLayout(3,2));
this.add(nameLabel);
this.add(name);
this.add(urlLabel);
this.add(url);
this.add(typeLabel);
this.add(type);
und das Programm wird falsch angezeigt, aber wenn die Aussagen über unkommentiert sind und die unter kommentiert:
//add some panes..
JPanel panel = new JPanel();
panel.add(nameLabel);
panel.add(name);
panel.add(urlLabel);
panel.add(url);
panel.add(typeLabel);
panel.add(type);
this.add(panel);
, dann geht das Programm funktioniert gut .. Unten finden Sie den vollständigen Code-Auszug.
[CODE]
public class FeedInfo extends JFrame {
private JLabel nameLabel = new JLabel("Name:", SwingConstants.RIGHT);
private JTextField name;
private JLabel urlLabel = new JLabel("URL",SwingConstants.RIGHT);
private JTextField url;
private JLabel typeLabel = new JLabel("Type",SwingConstants.RIGHT);
private JTextField type;
public FeedInfo()
{
super("Feed Information");
this.setSize(400,105);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
String response1 = JOptionPane.showInputDialog(null,"Enter the site name:");
name = new JTextField(response1,20);
String response2 = JOptionPane.showInputDialog(null,"Enter the site address:");
url = new JTextField(response2, 20);
String[] choices ={"Personal","Commercial","Unkown"};
int response3 = JOptionPane.showOptionDialog(null, "what type of site is it?",
"site Type",0, JOptionPane.QUESTION_MESSAGE, null, choices, choices[0]);
type = new JTextField(choices[response3],20);
//add some panes..
JPanel panel = new JPanel();
panel.add(nameLabel);
panel.add(name);
panel.add(urlLabel);
panel.add(url);
panel.add(typeLabel);
panel.add(type);
this.add(panel);
/*this.setLayout(new GridLayout(3,2));
this.add(nameLabel);
this.add(name);
this.add(urlLabel);
this.add(url);
this.add(typeLabel);
this.add(type);
*/
this.setVisible(true);
}
[/CODE]
Beachten Sie, dass ein 'GridLayout' nicht gut geeignet ist, um Reihen von Name/Wert-Paaren anzuzeigen. Im Allgemeinen sollte die Spalte mit den Etiketten dünner sein als die mit den Werten. In letzter Zeit würde ich nach 'GroupLayout' suchen, während ich in früheren JREs vielleicht ein verschachteltes Layout verwendet habe. –