JSlider - min/max aktualisieren

Folgende Frage. Ich habe eine JTable und einen JSlider. Der Slider soll abhängig von den min/max Werten einer Spalte auch min/max Values bekommen. Problem an der Sache ist, das zu dem Zeitpunkt der Initialisierung von Slider und Tabelle die Daten noch nicht in dem TableModel stehen. Daher war meine Idee alles zu initialisieren und am Ende des “Ladeprozesses” per setMin/setMax die Werte zu setzen.

Aber anscheind ist das irgendwie verboten oder anderweitig krumm:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at javax.swing.plaf.basic.BasicSliderUI.calculateTrackBuffer(BasicSliderUI.java:611)
	at javax.swing.plaf.basic.BasicSliderUI.calculateGeometry(BasicSliderUI.java:523)
	at javax.swing.plaf.basic.BasicSliderUI.paint(BasicSliderUI.java:926)

Wenn ich dagegen die Werte direkt beim Initialisieren angebe klappt alles einwandfrei. Genauso wenn das “neue” Minimum gleich dem alten Minimum ist.

Hat da jemand eine Idee wie man bei JSlidern im Nachhinein/Event die min/max Werte ändert oder was mit die Exception sagen will?

Moin,

zeig’ doch mal den Code, der den Fehler verursacht … :twisted:
Irgendwas ist da halt null …

Gruß
Klaus

Code an sich ist schwierig auch mit dem Kompilierbarem Beispiel. Aber ich versuchs mal nachvollziehbar zu machen

Die GUI Klasse wo das Element erzeugt wird

rangeSlider = new JSlider(0, 5, 1)
rangeSlider.setPaintTicks(true);
		rangeSlider.setPaintLabels(true);
		rangeSlider.setPaintTrack(true);
		rangeSlider.setMajorTickSpacing(5);
		rangeSlider.setMinorTickSpacing(1);
		
		rangeSlider.setFocusable(false);
		
		rangeSlider.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                //feuer event falls wert geändert und gebe es aus. funktioniert auch
                
            }
        });

und dann die events welche abgefangen werden

//event 1 - siehe oben zum aktualisieren
if(event1) slider.getValue();

//event2 ist das "init" event wenn alle daten im tablemodel stehen
if(event2){
rangeSlider.setMinimum(min);
rangeSlider.setMaximum(max);
//rangeSlider.setMinimum(1); geht auch nicht
//rangeSlider.setMinimum(0); dagegen geht weil gleich dem Ausgangswert
}

Grundsätzlich ist es kein Problem die Grenzen eines Sliders zur Laufzeit zu verändern.
Aus welchem Prozess heraus wird die Änderung angestoßen? (Evlt. darauf achten, dass die Änderung im EDT passiert)
Was steckt hinter dem even2?

Ein PropertyChangeEvent. Angestoßen wird das ganze durch eine Methode in dem Model zur View. Das Model wiederum hat dann besagten PropertyListener/ChangeSupport

Werde nochmal etwas testen da es ein abgeleiteter JSlider ist, welcher zwei Values verarbeiten kann.

Wenn die Exception aus dem UI kommt, sagt meine Kristallkugel: Die Werte werden vom falschen Thread verändert. Schreib mal ein

System.out.println("I'm in "+Thread.currentThread());
rangeSlider.setMinimum(min);

und wenn dort was anderes steht, als ~“AWT Event Queue”, ist es der falsche Thread. Dann ggf. mit SwingUtilities auf den EDT legen.