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.
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.
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]
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.
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]