Wie absolut-position ein JPanel über ein weiteres JPanel mit setLayout(null) und ein hintergrund Bild?
Arbeite ich mit JFrames in Java, speziell mit absolut positionierten Elementen, die müssen sich überlappen. Ich verstehe, dass overlay-Komponenten sollte man ein JPanel (mit setOpacity(false);
), und positionieren Sie es mit entweder setBounds(x,y,x2,y2);
oder setPosition(x,y)
& setSize(x,y)
. Leider sind die Platten wirken wie CSS inline-divs
; Sie nehmen nur die benötigte Menge an Platz auf Ihrer Linie, und nicht stapelbar.
Dies ist der code, den ich bisher, aber es scheint nicht zu handeln, wie würde ich es mir vorstellen würde:
class Login extends JFrame {
private JPanel backgroundpanel;
private JPanel panel;
private JPanel panel2;
private JTextField usernameBox;
private JPasswordField passwordBox;
private JButton button;
private int height = 319;
private int width = 452;
private ImageIcon ii = new ImageIcon("special-window-BG.png");
private JLabel image;
public Login() {
setLayout(null);
setTitle("Login");
setSize(width,height);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
buildPanel();
add(backgroundpanel);
setVisible(true);
}
private void buildPanel() {
usernameBox = new JTextField(20);
passwordBox = new JPasswordField(20);
button = new JButton("Login");
image = new JLabel(ii);
backgroundpanel = new JPanel();
panel = new JPanel();
panel2 = new JPanel();
backgroundpanel.add(panel);
backgroundpanel.add(panel2);
backgroundpanel.add(image);
panel.setBackground(Color.red);
panel.setBounds(0, 0, 10, 10);
panel.setOpaque(false);
panel2.setBackground(Color.blue);
panel2.setBounds(0, 0, 10, 10);
panel2.setOpaque(false);
panel.add(passwordBox);
panel2.add(button);
backgroundpanel.setOpaque(false);
backgroundpanel.isOptimizedDrawingEnabled();
backgroundpanel.setBounds(0, 0, width, height);
...Wiege hatte, ist allerdings unnötig.
Also im Grunde, ich würde gerne wissen, wie man absolut position JPanels (oder JComponents, wenn das einfacher ist) über ein JPanel mit hintergrund-Bild.
Dank, dass Sie einen Blick auf diese Frage, habe ich damit verbracht, viel zu viel Zeit auf diese Methode; der auskommentierte code erstreckt sich fast 500 Zeilen bestanden, was ich geschrieben, also ich habe nirgendwo sonst zu drehen. Das Bild unten zeigt eine grobe Darstellung von dem, was ich bin versucht zu erreichen, ich bin mir nicht sicher, ob ich'actually nahe kommen immer noch, weil manchmal die JComponents zu verschwinden scheinen, als ob Sie hinter dem Bild im hintergrund, jedoch möchte ich finden, dass die einfache Lösung, die sehr wahrscheinlich direkt vor meinen Augen!
http://i.stack.imgur.com/revz8.jpg
Das hintergrund Bild hat bestimmte Grenzen für text-Felder platziert werden, es sei denn, es ist ein anderes layout-Methode, mit der die Komponente platziert werden, die GENAU x/y Pixel.
InformationsquelleAutor Exac | 2012-06-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist Einstellung
setLayout(null)
auf IhreJFrame
aber nicht auf die "backgroundpanel" (das layout ist standardmäßig eingestelltFlowLayout
).Sollten Sie nicht legen Sie das layout Ihrer
Login
frame - da ist es standardmäßig gesetzt, umBorderLayout
- und es ist ok (Sie wollen den "backgroundpanel" wachsen entsprechend die Mutter).Stattdessen
setLayout(null)
auf IhreJPanel
- "backgroundpanel" - zu denen Sie Ihre beliebige Position gebracht panels.InformationsquelleAutor Xeon
Sowas?
InformationsquelleAutor Andrew Thompson