3 Stimmen

JLabel horizontale Positionierung funktioniert nicht wie erwartet

Hier ist ein JFrame, den ich mit einer Reihe von JLabels mit den folgenden Eigenschaften zeigen wollte:

  • vertikal gestapelt
  • Horizontal zentriert
  • grüne Grenze
  • weißer Hintergrund
  • blauer Text

Aber stattdessen bekomme ich das hier:

enter image description here

Der blaue Text, der vertikal gestapelt ist, und der grüne Rahmen funktionieren gut, aber der weiße Hintergrund und die horizontale Zentrierung funktionieren nicht. Ich hätte auch gedacht, dass sich die Beschriftungen über die gesamte Breite des JPanels erstrecken würden.

Was mache ich falsch?


edit: Verfehlt diese Frage über die Hintergrundfarbe. Also meine verbleibende Frage ist über BoxLayout und die Positionierung von Komponenten in der anderen Achse.


import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class BoxLayoutLabelsTest extends JFrame
{
    public BoxLayoutLabelsTest(String title)
    {
        super(title);
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        addLabel(panel, "Hydrogen");
        addLabel(panel, "Helium");
        addLabel(panel, "Lithium");
        addLabel(panel, "Beryllium");
        addLabel(panel, "Boron");

        setContentPane(panel);
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    static private void addLabel(JPanel panel, String text) {
        JLabel label = new JLabel(text);
        label.setBorder(BorderFactory.createLineBorder(Color.GREEN));
        label.setBackground(Color.WHITE);
        label.setForeground(Color.BLUE);
        label.setHorizontalAlignment(SwingConstants.CENTER);
        panel.add(label);
    }

    public static void main(String[] args) {
        new BoxLayoutLabelsTest("BoxLayoutLabelsTest").setVisible(true);
    }

}

4voto

MockerTim Punkte 2455

Fügen Sie die folgende Zeile in addLabel() :

label.setAlignmentX(CENTER_ALIGNMENT);

Siehe Wie man BoxLayout verwendet für ein vollständiges Beispiel.

Später hinzugefügt:

Ich habe eine unkomplizierte Lösung gefunden:

label.setMaximumSize(new Dimension(200, 200));
//label.setAlignmentX(CENTER_ALIGNMENT);//aligns label itself
label.setHorizontalAlignment(SwingConstants.CENTER);//aligns text inside the label

Das funktioniert auch, aber Ihre Lösung mit BorderLayout scheint angemessener zu sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X