Um den Dreh-Layouts zu erhalten, würde ich ihnen meinen Artikel empfehlen zu lesen (http://java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr/). Es ist alt, aber die Konzepte und wie FlowLayout funktioniert, sind detailliert.
Was meinst du mit "übereinander"?
Wenn Sie meinen, wie
Password
<field>
EDIT: Ich erinnere mich an einem einfacheren Weg, dies zu (vollständig im JDK/JRE) ... (Dies ist ähnlich zu dem, was ich mit den BoxBeans machte unten, aber Sie haben nicht die BoxBeans brauchen. ich BoxBeans erstellt vor langer Zeit BoxLayout in einem UI-Builder in der Lage sein zu verwenden ...)
JLabel label = new JLabel("Password") {
@Override public Dimension getMaximumSize() {
return super.getPreferredSize();
}
};
JPasswordField field = new JPasswordField() {
@Override public Dimension getMaximumSize() {
return super.getPreferredSize();
}
};
field.setColumns(10);
Box verticalBox = Box.createVerticalBox();
verticalBox.add(Box.createVerticalGlue());
verticalBox.add(label);
verticalBox.add(field);
verticalBox.add(Box.createVerticalGlue());
//
Box horizontalBox = Box.createHorizontalBox();
horizontalBox.add(Box.createHorizontalGlue());
horizontalBox.add(verticalBox);
horizontalBox.add(Box.createHorizontalGlue());
add(horizontalBox);
Zurück Antwort Referenz ...
Ich empfehle nicht FOLGENDE ABER ES KANN ANDERE LESER MIT IDEEN
Sie können
setLayout(FlowLayout());
JPanel group = new JPanel(new BorderLayout());
group.add(new JLabel("Password"), BorderLayout.NORTH);
group.add(passwordField, BorderLayout.SOUTH);
add(group);
helfen so etwas wie diese ein kleines Panel in der oberen Mitte des gesamten UI erstellen, die das Kennwort enthält und Feld.
Beachten Sie, dass das geschachtelte BorderLayout sicherstellt, dass das Label und das Feld jeweils ihre bevorzugte Größe erhalten. Sie müssen setColumns auf dem Feld auf die Anzahl der Zeichen setzen, die angezeigt werden sollen.
Wenn Sie das Etikett/Feld vertikal als auch zentrieren möchten, können Sie folgendermaßen vorgehen
setLayout(new GridBagLayout());
//
add(new JLabel("Password"),
new GridBagConstraints(0,0,1,1,1,1,
GridBagConstraints.SOUTH,GridBagConstraints.NONE,
new Insets(3,3,3,3), 0,0));
field.setColumns(10);
add(field, new GridBagConstraints(0,1,1,1,1,1,
GridBagConstraints.NORTH,GridBagConstraints.NONE,
new Insets(3,3,3,3), 0,0));
ich GridBagLayout im allgemeinen Hass mit, so dass ich eine Version mit BoxLayout hinzufügen (aber es ist ein bisschen trickier aufgrund der bevorzugten Größeneinstellungen)
JFrame f = new JFrame();
f.setLayout(new BorderLayout());
//
JPanel stuffH = new JPanel();
f.add(stuffH, BorderLayout.CENTER);
stuffH.setLayout(new BoxLayout(stuffH, BoxLayout.X_AXIS));
//
JPanel stuffV = new JPanel();
stuffV.setLayout(new BoxLayout(stuffV, BoxLayout.Y_AXIS));
//
JLabel label = new JLabel("Password");
BoxAdapter labelAdapter = new BoxAdapter();
labelAdapter.add(label);
JPasswordField field = new JPasswordField();
field.setColumns(10);
BoxAdapter fieldAdapter = new BoxAdapter();
fieldAdapter.add(field);
//
stuffV.add(new VerticalGlue()); // for vertical spacing
stuffV.add(labelAdapter);
stuffV.add(fieldAdapter);
stuffV.add(new VerticalGlue()); // for vertical spacing
//
stuffH.add(new HorizontalGlue()); // for horizontal spacing
stuffH.add(stuffV);
stuffH.add(new HorizontalGlue()); // for horizontal spacing
//
f.setVisible(true);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Ein paar Anmerkungen gegeben:
- ich bin mit meinem B oxBeans Helfer-Klassen - siehe . Diese Seite basiert auf VisualAge für Java, aber das Krug am unteren Rand der Seite kann außerhalb von VAJ verwendet werden. Ich habe es zum Beispiel in Eclipse versucht.
- AFAICS, Sie können das Layout eines Jframes nicht direkt auf BoxLayout setzen, also habe ich ein zusätzliches Panel dazwischen eingefügt. Es gibt ein Check in BoxLayout, das Probleme mit der automatischen Umleitung des Inhaltsbereichs hat.
- Ich habe die BoxLayouts so verschachtelt, dass die horizontale Zentrierung (das stuffH-Panel) eine vertikale Zentrierung enthält (das stuffV-Panel). Sie werden zentriert, indem sie mit "Leim" -Komponenten umgeben werden, die einfach Komponenten sind, die sich erweitern können.
Ich musste das Etikett und Feld in einem BoxAdapter setzen, der ihre maximale Größe auf ihre bevorzugte Größe beschränkt.Wenn Sie BoxAdapter nicht verwenden möchten, können Sie den gleichen Effekt, indem Sie die folgenden für das Feld und Label acheive:
JLabel label = new JLabel("Password") {
@Override public Dimension getMaximumSize() {
return super.getPreferredSize();
}
};
JPasswordField field = new JPasswordField() {
@Override public Dimension getMaximumSize() {
return super.getPreferredSize();
}
};
Hoffnung beweist dies für Sie hilfreich und jemand anderes! - Scott
Ich kam hierher, um Layouts zu empfehlen, aber ich sehe, Sie haben mich dazu geschlagen. +1 –
Ja, das ist es, was ich übereinander gesehen habe. Und ich möchte sie auch vertikal zentrieren :) Versuchte es mit setLocation und setBounds, aber beide haben nicht funktioniert –
Ja das funktioniert super: D Vielen Dank für Ihre Hilfe und Zeit. Ich habe noch nie mit Gridbag gearbeitet, also werde ich es jetzt studieren, damit ich es auch mit meinen anderen Panels verwenden kann. Nochmals, vielen Dank :) –