BoxLayout zentriert Label nicht

Hallo,
Ich versuche als "Übungsprojekt" für meine Swing-Kenntnisse ein Programm zu entwickeln, bei dem man erst in einem Fenster über einen JSlider die Zeit angeben kann, und nachdem man auf einen Knopf gedrückt hat, in dem darauffolgenden Fenster für die entsprechende zeit so oft versucht, wie möglich den Knopf zu drücken um die CPS (Clicks Per Second) zu berechnen.

Ich habe die grundsätzliche Logik für mein erstes Fenster geschrieben, jedoch wird das JLabel, das den momentanen Stand des JSliders anzeigen soll nicht zentriert über dem Jslider angezeigt, sondern ein bisschen nach links versetzt.

Ich habe um dies umzusetzen ein vertikales BoxLayout in einem FlowLayout (damit der Knopf dann rechts daneben ist) verschachtelt. Aber ich verstehe nicht, weshalb das JLabel nicht zentriert über dem JSlider liegt.

13020
Auf dem Bild ist das Fenster zu sehen, dass das ungewünschte Ergebnis zeigt.

Da Ich den Fehler nicht genau identifizieren konnte, und ich den fehler nur auf das BoxLayout einschätze, ist nun im folgenden der ganze Quellcode aufgelistet, ich hoffe, das stellt keine zu großen Probleme dar.

Java:
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;


public class CPS {
    JFrame frame;
    JSlider timeSlider;
    JLabel stateTimeSlider;
    final int timeMax = 60;
    final int timeMin = 0;
    JButton button;
    Container mainPane;
    JPanel sliderPane;
    int duration;

    public CPS(){
        frame = new JFrame("CPS");
        button = new JButton("Start");
        stateTimeSlider = new JLabel("BeispielText");
        mainPane = new Container();
        sliderPane = new JPanel();
        initSlider();
        initFrame();
        initButton();
        mainPane.setLayout(new FlowLayout());
        sliderPane.setLayout(new BoxLayout(sliderPane, BoxLayout.Y_AXIS));
    }

    private void initSlider() {
        timeSlider = new JSlider(JSlider.HORIZONTAL, timeMin, timeMax, 0);
        timeSlider.setMajorTickSpacing(10);
        timeSlider.setMinorTickSpacing(5);
        timeSlider.createStandardLabels(1);
        timeSlider.setPaintTicks(true);
        timeSlider.setPaintLabels(false);

        timeSlider.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                duration = timeSlider.getValue();
                stateTimeSlider.setText("Time: " + duration);
            }
        });
        sliderPane.add(timeSlider);
    }


    private void initButton() {
        button.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent e) {
                if(duration != 0){
                    //Start des nächsten Fensters
                    System.out.println("done");
                    frame.dispose();
                }
            }
            @Override
            public void mousePressed(MouseEvent e) {}
            @Override
            public void mouseReleased(MouseEvent e) {}
            @Override
            public void mouseEntered(MouseEvent e) {}
            @Override
            public void mouseExited(MouseEvent e) {}
        });
    }

    private void initFrame() {
        frame.setResizable(true);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
    }

    public void init() {
        timeSlider.setVisible(true);
        button.setVisible(true);
        stateTimeSlider.setVisible(true);

        sliderPane.add(stateTimeSlider);
        sliderPane.add(timeSlider);

        mainPane.add(sliderPane);
        mainPane.add(button);

        frame.add(mainPane);
        frame.setVisible(true);
    }
}

In meiner Hauptklasse erstelle ich nur noch ein Objekt aus dieser Klasse, und rufe danach die Funktion init() auf.

Ich bedanke mich im Voraus um die Bemühungen,

Gruß [anonym] ;)
 

Blender3D

Top Contributor
Ich habe die grundsätzliche Logik für mein erstes Fenster geschrieben, jedoch wird das JLabel, das den momentanen Stand des JSliders anzeigen soll nicht zentriert über dem Jslider angezeigt, sondern ein bisschen nach links versetzt.
Probiere diesen Code aus. Ich denke der mach das was du willst.
Java:
import javax.swing.JFrame;

public class start {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setTitle("SliderLabel");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new TestPanel(300, 300));
        frame.pack();
        frame.setVisible(true);
    }
}
Java:
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.border.EtchedBorder;

@SuppressWarnings("serial")
public class TestPanel extends JPanel {
    public TestPanel(int width, int height) {
        setPreferredSize(new Dimension(width, height));
        SliderLabel sliderLabel = new SliderLabel();       
        sliderLabel.setLabel("Hallo");
        sliderLabel.setShowLabel(true);
        sliderLabel.setShowValue(true);
        sliderLabel.setPreferredSize(new Dimension(500 , 70));
        sliderLabel.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
        JSlider slider = sliderLabel.getSlider();
        slider.setMajorTickSpacing(10);
        slider.setMinorTickSpacing(5);
        slider.setPaintTicks(true);
        slider.setValue(0);
        slider.setMajorTickSpacing(10);
        slider.setMinorTickSpacing(5);
        slider.setPaintTicks(true);
        add(sliderLabel);
    }
}
Java:
import java.awt.BorderLayout;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

@SuppressWarnings("serial")
public class SliderLabel extends JPanel implements ChangeListener {
    public final static int LABEL_TOP = 0;
    public final static int LABEL_BOTTOM = 1;
    public final int SLIDER = 0;
    public final int LABEL = 1;
    public final int VALUE = 2;
    private JComponent[] item = new JComponent[] { new JSlider(), new JLabel(), new JLabel("0") };
    private boolean showValue = false;
    private boolean showLabel = false;
    private int order = LABEL_BOTTOM;

    public SliderLabel() {
        setLayout(new BorderLayout(2, 2));
        setOrder(order);
        for (int i = 1; i < item.length; i++) {
            getLabel(i).setHorizontalAlignment(SwingConstants.CENTER);
            getLabel(i).setOpaque(true);
        }
    }

    public JLabel getLabel(int id) {
        if (id < 1 || id > item.length - 1)
            return null;
        return (JLabel) item[id];
    }

    public JSlider getSlider() {
        return (JSlider) item[SLIDER];
    }

    public void setOrder(int order) {
        if (order != LABEL_TOP && order != LABEL_BOTTOM)
            return;
        this.order = order;
        for (JComponent c : item)
            remove(c);
        if (order == LABEL_BOTTOM) {
            if (showLabel)
                add(item[LABEL], BorderLayout.SOUTH);
            add(item[SLIDER], BorderLayout.CENTER);
            if (showValue)
                add(item[VALUE], BorderLayout.NORTH);
        } else {
            if (showValue)
                add(item[VALUE], BorderLayout.SOUTH);
            add(item[SLIDER], BorderLayout.CENTER);
            if (showLabel)
                add(item[LABEL], BorderLayout.NORTH);
        }
        if (showValue)
            getSlider().addChangeListener(this);
        else
            getSlider().removeChangeListener(this);
    }

    public void setShowLabel(boolean showLabel) {
        this.showLabel = showLabel;
        setOrder(order);
    }

    public void setShowValue(boolean showValue) {
        this.showValue = showValue;
        setOrder(order);
    }

    public void setLabel(String text) {
        getLabel(LABEL).setText(text);
    }

    @Override
    public void stateChanged(ChangeEvent e) {
        getLabel(VALUE).setText(getSlider().getValue() + "");
    }

}
;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S BoxLayout: Anordnung der Komponenten links statt zentriert AWT, Swing, JavaFX & SWT 0
Z BoxLayout funktioniert nicht und Buttongröße AWT, Swing, JavaFX & SWT 18
R Swing panels nebeneinander mit BoxLayout.X_AXIS AWT, Swing, JavaFX & SWT 4
M BoxLayout AWT, Swing, JavaFX & SWT 6
T Swing Größe einer Komponente in einem BoxLayout / FlowLayout festlegen AWT, Swing, JavaFX & SWT 7
I BoxLayout, FlowLayout und Komponentengrößen AWT, Swing, JavaFX & SWT 1
S Bei BoxLayout haben hinzugefügten Jpanels einen Versatz/Space AWT, Swing, JavaFX & SWT 0
K BoxLayout-nicht teilbar AWT, Swing, JavaFX & SWT 6
apple987123 Swing BoxLayout AWT, Swing, JavaFX & SWT 3
G Problem mit Button im Boxlayout... AWT, Swing, JavaFX & SWT 4
F Swing BoxLayout ein JTextfield wird falsch positioniert AWT, Swing, JavaFX & SWT 2
T BoxLayout AWT, Swing, JavaFX & SWT 4
P LayoutManager Komponenten einfügen (FlowLayout, BoxLayout) AWT, Swing, JavaFX & SWT 2
R BoxLayout(Y_Axis) ignoriert preferedSize von Buttons AWT, Swing, JavaFX & SWT 5
B Probleme mit Layout Manager (BoxLayout) AWT, Swing, JavaFX & SWT 4
C Swing BoxLayout: Buttongröße AWT, Swing, JavaFX & SWT 10
F BoxLayout mit gleicher größe AWT, Swing, JavaFX & SWT 2
D Swing [BoxLayout] Nur TextArea und nicht TextField vergroessen AWT, Swing, JavaFX & SWT 2
G BoxLayout: Ausrichtung der Komponenten AWT, Swing, JavaFX & SWT 2
K BoxLayout skaliert die "falschen" Elemente AWT, Swing, JavaFX & SWT 5
hdi BoxLayout mit Abstand? AWT, Swing, JavaFX & SWT 5
G BoxLayout? AWT, Swing, JavaFX & SWT 2
spacegaier BoxLayout: Buttons auf gleiche Größe bringen AWT, Swing, JavaFX & SWT 4
J Wie kann man beim BoxLayout scrollen? Keine Scrollleiste!:-( AWT, Swing, JavaFX & SWT 7
H AWTError: BoxLayout can't be shared AWT, Swing, JavaFX & SWT 1
A Probleme mit JPanel und BoxLayout AWT, Swing, JavaFX & SWT 5
J JComboBox und BoxLayout AWT, Swing, JavaFX & SWT 2
D BoxLayout in GridBagLayout AWT, Swing, JavaFX & SWT 7
O BoxLayout AWT, Swing, JavaFX & SWT 3
G BoxLayout: Abstand zwischen vertikalen Komponenten! AWT, Swing, JavaFX & SWT 4
S JavaFX Node soll auch nach Skalierung zentriert platziert sein AWT, Swing, JavaFX & SWT 3
D Panel in Panel zentriert nicht richtig AWT, Swing, JavaFX & SWT 3
G JTable zentriert scrollen AWT, Swing, JavaFX & SWT 2
K Java DrawString zentriert und mehrzeilig AWT, Swing, JavaFX & SWT 8
J Swing GridBagLayout: Links-nach-rechts Orientierung statt zentriert AWT, Swing, JavaFX & SWT 12
F JButton Text-Umbruch zentriert AWT, Swing, JavaFX & SWT 5
W textfield zentriert AWT, Swing, JavaFX & SWT 2
K Zwei Panels zentriert anordnen AWT, Swing, JavaFX & SWT 3
N JLabel immer zentriert AWT, Swing, JavaFX & SWT 2
M GridBagLayout - Position immer zentriert AWT, Swing, JavaFX & SWT 5
A JDialog nur horizontal zentriert AWT, Swing, JavaFX & SWT 2
A Icon,zentriert,Farbiger Text alles in einer Tabelle/Spalte ? AWT, Swing, JavaFX & SWT 4
M JTable text zentriert darstellen AWT, Swing, JavaFX & SWT 5
B Cursor zentriert in ein Textfeld positionieren AWT, Swing, JavaFX & SWT 2
T JScrollPane - JLabel zentriert darstellen AWT, Swing, JavaFX & SWT 5
P JTextPane ALIGN_JUSTIFIED zeigt den Text zentriert an? AWT, Swing, JavaFX & SWT 8
m@nu Graphics: Per drawString() Text vertikal zentriert zeichnen AWT, Swing, JavaFX & SWT 5
M String zentriert darstellen AWT, Swing, JavaFX & SWT 2
H JavaFX Label.Text mit bind an DoubleProperty binden AWT, Swing, JavaFX & SWT 3
izoards Ausdruck auf Label Drucker AWT, Swing, JavaFX & SWT 1
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
H RPG Programmieren, label.setLocation funktioniert nicht AWT, Swing, JavaFX & SWT 7
Jose05 Javafx Label Höhe=Breite AWT, Swing, JavaFX & SWT 1
N javafx Position der Bustaben finden label AWT, Swing, JavaFX & SWT 1
N Label Schriftart Ändern javafx AWT, Swing, JavaFX & SWT 2
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
J JavaFX Label aktualisieren AWT, Swing, JavaFX & SWT 18
M JavaFX javaFX Label-Text wird nicht gesetzt AWT, Swing, JavaFX & SWT 3
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
B Ausgaben einer Umrechnung vom Textfeld in ein Label AWT, Swing, JavaFX & SWT 2
R JavaFX Label oder Imageview anzeigen mit Buttonklick AWT, Swing, JavaFX & SWT 4
L Label im JavaFX Thread Updaten AWT, Swing, JavaFX & SWT 3
A Inhalt wechseln bei Klick auf Label AWT, Swing, JavaFX & SWT 8
ralfb1105 JavaFX Label lässt sich innerhalb service Task nicht updaten? AWT, Swing, JavaFX & SWT 22
Trèfle JavaFX Formattierung im Label AWT, Swing, JavaFX & SWT 3
ralfb1105 JavaFX Wie Text Label in neuem Window von Main Stage setzen? AWT, Swing, JavaFX & SWT 6
F Countdown in Label anzeigen AWT, Swing, JavaFX & SWT 14
H JavaFX - Label aktualisieren AWT, Swing, JavaFX & SWT 1
J Dateiname im Label einblenden AWT, Swing, JavaFX & SWT 4
C SWT autosize bei gc.drawString() auf einem Label AWT, Swing, JavaFX & SWT 7
xYurisha Aus einer Gui Buttons, Label und ProgessBars entfernen AWT, Swing, JavaFX & SWT 4
T Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
zhermann FX Label text wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 12
zhermann NullPointerException bei Label.setText() AWT, Swing, JavaFX & SWT 5
T JavaFX Label mit mehreren Images AWT, Swing, JavaFX & SWT 11
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
L JavaFX ContextMenu bei Label mit Linksklick AWT, Swing, JavaFX & SWT 4
J JavaFX - Felder (Label) in einer ForSchleife bearbeiten AWT, Swing, JavaFX & SWT 4
N Anordnung der Label AWT, Swing, JavaFX & SWT 3
N Swing Label auf Panel legen.. AWT, Swing, JavaFX & SWT 2
D JavaFX Label lässt sich nicht mehrmals färben AWT, Swing, JavaFX & SWT 7
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
M Text in einem Label fett setzen AWT, Swing, JavaFX & SWT 4
D Swing JFreeChart Crosshair Label - setPreferredSize oder ähnliches, aber wo ? AWT, Swing, JavaFX & SWT 1
T CSS Rechtsbüdniges Label mit Zwei Zeilen AWT, Swing, JavaFX & SWT 7
J JavaFX Translation Text/Label AWT, Swing, JavaFX & SWT 2
Tom299 JavaFX Text oder Label benutzen AWT, Swing, JavaFX & SWT 4
C Textfeld und Label werden nicht angezeigt (Ubuntu) AWT, Swing, JavaFX & SWT 2
C SWT Treeview mit Bilder im Label verändert Expanded Icon AWT, Swing, JavaFX & SWT 1
Augenblau JavaFX Wechselnde Werte in Label darstellen AWT, Swing, JavaFX & SWT 7
V Swing Brauche Hilfe mit Label AWT, Swing, JavaFX & SWT 3
S JButton-Label vergrößern AWT, Swing, JavaFX & SWT 2
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
M label mit icon verschieben. AWT, Swing, JavaFX & SWT 1
B Swing JXMapKit Mausemove in Label anzeigen AWT, Swing, JavaFX & SWT 0
K Bild in Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
G Label wird nicht erstellt AWT, Swing, JavaFX & SWT 0
7 AWT problem: KeyListener/ test im Label umändern AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben