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

Warum würden Sie brauchen absolute layouts zu erreichen, das Ergebnis des Bildes ?
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

Schreibe einen Kommentar