Java JLabel auf JPanel zentrieren

Tron36

Ensign
Dabei seit
Jan. 2011
Beiträge
174
Hallo Leute,
es geht darum, dass ich versuche ein JLabel auf einem JPanel, sowohl in hotizonal als auch in vertikal, zu zentrieren.
Ich hatte es über Layouts versucht, komme aber irgendwie nicht weiter.
Dazu habe ich folgenden Code geschrieben:

Java:
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import java.awt.Color;

public class Valar extends JFrame {

    private JPanel contentPane;
    private JLabel lblNewLabel ;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Valar frame = new Valar();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Valar() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBackground(Color.BLACK);
        setContentPane(contentPane);
       
        lblNewLabel = new JLabel("X");
        lblNewLabel.setForeground(Color.WHITE);
        contentPane.add(lblNewLabel, BorderLayout.CENTER);
    }
}
Wie kann man JLabel auf JPanel zentrieren?
Ich hoffe ihr könnt mir weiter helfen.

Lg
Tron36
 

Tron36

Ensign
Ersteller dieses Themas
Dabei seit
Jan. 2011
Beiträge
174
den Beitrag von StackOverflow hatte ich auch gesehen, hat aber nicht viel gebracht.
 

abcddcba

Commander
Dabei seit
Juni 2018
Beiträge
2.135
Du machst
Java:
contentPane = new JPanel();
Das Default Layout von JPanel ist FlowLayout, da bringt es dir nix wenn du
dann
Java:
contentPane.add(lblNewLabel, BorderLayout.CENTER);
aufrufst.
Du musst schon im Konstruktor dann ein BorderLayout uebergeben:

Java:
contentPane = new JPanel(new BorderLayout());
Quelle ist uebrigens immer zuerst Javadoc: https://docs.oracle.com/javase/8/docs/api/javax/swing/JPanel.html#JPanel--

Und dann offizielle Swing Docs: https://docs.oracle.com/javase/tutorial/uiswing/layout/index.html

Danach natuerlich noch StackOverflow, aber das ist wohl klar.

Anmerkung: Ich hab jetzt nicht dein Programm getestet, evtl. loest es dein Problem nicht aber ich wollte nur auf eine falsche Verwendung von Swing Komponenten hier hinweisen, passiert jedem mal.
 

Nolag

Lieutenant
Dabei seit
Nov. 2015
Beiträge
798
Das contentPane eines JFrame ist übrigens bereits ein JPanel mit BorderLayout. Ein neues Panel zu erzeugen ist nicht notwendig.
Dann fehlt eigentlich nur noch:
Java:
lblNewLabel.setHorizontalAlignment(JLabel.CENTER);
Warum die StackOverflow Lösungen so kompliziert sind, verstehe ich allerdings nicht.
 
Top