JLabel anzuzeigenden Text zentrieren

stylegangsta

Bekanntes Mitglied
Hi,

ich habe 16 Buttons, die unterhalb alle ein JLabel haben, welcher den entsprechenden Namen anzeigt.
Java:
        btnBW = new JButton();
        btnBW.setIcon(new ImageIcon(BW_Wappen));
        lblBW = new JLabel("Baden - W.");
        lblBW.setFont(lblBW.getFont().deriveFont(Font.BOLD, 15));
        lblBW.setForeground(Color.BLACK);
        lblBW.setHorizontalAlignment(SwingConstants.CENTER);
        lblBW.setVerticalAlignment(SwingConstants.CENTER);
        lblBW.setBounds(220, 138, 110, 140);
        btnBW.setBounds(220, 58, 110, 140);

        btnBayern = new JButton();
        btnBayern.setIcon(new ImageIcon(Bayern_Wappen));
        lblBayern = new JLabel("Bayern");
        lblBayern.setFont(lblBayern.getFont().deriveFont(Font.BOLD, 15));
        lblBayern.setForeground(Color.BLACK);
        lblBayern.setHorizontalAlignment(SwingConstants.CENTER);
        lblBayern.setVerticalAlignment(SwingConstants.CENTER);
        lblBayern.setBounds(340, 138, 110, 140);
        btnBayern.setBounds(340, 58, 110, 140);

Das bedeutet, dass die beiden Zeilen
Java:
        lblBayern.setHorizontalAlignment(SwingConstants.CENTER);
        lblBayern.setVerticalAlignment(SwingConstants.CENTER);
bei jedem JLabel -in meinem Fall 16- mal vorkommen.

Dachte an Methode
Java:
    public static void JLabel() {
        setHorizontalAlignment(SwingConstants.CENTER);
        setVerticalAlignment(SwingConstants.CENTER);
    }
, damit ich das nicht mehr 16 mal habe. Aber leider ist der Text dann nicht mehr zentriert unter dem Button, sondern Linksbündig.

Wer kann mir helfen?
 
den ansatz deiner vorgeschlagenen methode versteh ich nicht. was soll das static, warum public und wo soll die das label herbekommen?
mach doch einfach eine generator-methode:
Java:
private JLabel createLabel(String text) {
    JLabel ret = new JLabel(text);
    ret.setHorizontalAlignment(SwingConstants.CENTER);
    ret.setVerticalAlignment(SwingConstants.CENTER);
    return ret;
}
 
Das müsste es sein. Die main wird von einer anderen Klasse aufgerufen, die den Frame öffnet

Java:
private JLabel lblBW;

public AEKFrame() {
createWidgets();
addWidgets();
}

private void addWidgets() {
        getContentPane().setLayout(null);
        getContentPane().add(lblTitelText);
}

private void createWidgets() {

lblBW = new JLabel("Baden - W.");
lblBW.setFont(lblBW.getFont().deriveFont(Font.BOLD, 15));
lblBW.setForeground(Color.BLACK);
lblBW.setHorizontalAlignment(SwingConstants.CENTER);
lblBW.setVerticalAlignment(SwingConstants.CENTER);
lblBW.setBounds(220, 138, 110, 140);
}

Und der Teil:
lblBW = new JLabel("Baden - W.");
lblBW.setFont(lblBW.getFont().deriveFont(Font.BOLD, 15));
lblBW.setForeground(Color.BLACK);
lblBW.setHorizontalAlignment(SwingConstants.CENTER);
lblBW.setVerticalAlignment(SwingConstants.CENTER);
lblBW.setBounds(220, 138, 110, 140);
kommt insgesamt für 16 Bundesländer vor, wollte deswegen die Zentrierung wenigstens noch getrennt haben, damit das nur einmal vorkommt
 
was hälst du von
Java:
label = new JLabel("Hallo",SwingConstants.CENTER); // oder kurz 0

schau dir mal die Konstruktoren von JLabel an...(API 😉)
 

Zurück
Oben