Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo,
setze mich gerade mit GUI auseinander und hätte eine Frage zum JSlider. Und zwar hab ich in meinem (einfachen) Programm ein JLabel (label) und ein JSlider (slider) hinzugefügt. Jetzt wollte ich den aktuellen Wert des JSliders auf ein Label haben. Also wenn ich den slider auf z. B. 4 stelle, dass dann auch im Label eine 4 steht. Als ich jedoch dem slider den ChangeListener adden wollte (Zeile 47 im Code), gibt er folgende Fehlermeldung aus:
Exception in thread "main" java.lang.NullPointerException
at Fenster.<init>(Fenster.java:47)
at Fenster.main(Fenster.java:13)
Hier einmal der Code von mir:
Java:
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.GridLayout;
import java.awt.event.*;
public class Fenster extends JFrame implements ChangeListener {
public static void main(String[] args) {
Fenster fenster1 = new Fenster("Mein Fenster");
fenster1.setVisible(true);
}
private JSlider slider;
private JLabel label;
public Fenster (String title){
//Superklasse aufrufen mit title
super(title);
//Layout ist gridLayout
this.setLayout(new GridLayout(1,2));
//GUI-Komponenten definieren
JSlider slider = new JSlider();
JLabel label = new JLabel();
//Hinzufügen zu Fenster
this.add(slider);
this.add(label);
//Einstellungen für Slider
slider.setMinimum(0); //Minimalwert ist Null
slider.setMaximum(10); //Maximalwert ist 10
slider.setMinorTickSpacing(1); //Feine Striche in 1er Schritte
slider.setMajorTickSpacing(2); //Große Striche in 10er Schritten
slider.setPaintTicks(true); //Striche werden angezeigt
slider.setPaintLabels(true); //Anzeige der Zahlen
slider.setPaintTrack(true); //Balken werden angezeigt
slider.setSnapToTicks(true); //Zu ganzzahligen Werten "springen"
//ChangeListener hinzufügen
this.slider.addChangeListener(this);
//anordnen
this.pack();
}
public void stateChanged (ChangeEvent e){
//Wenn sich slider auf einen anderen Wert bewegt soll dieser
//Wert im Label angezeigt werden
this.label.setText(Integer.toString(slider.getValue()));
}
}
Typischer Anfängerfehler: Es existieren eine Instanzvariable und eine lokale Variable mit gleichem Namen. Die Instanzvariablen werden nicht verwendet, statt dessen werden im Konstruktor lokale Variablen mit gleichen Namen deklariert.
Die Worte "JSlider" und "JLabel" aus Zeile 29 und 30 löschen.