2015-04-28 12 views
6

Ich bin auf etwas gestoßen, das (für mich sowieso) ein seltsames Problem mit JavaFX-Spinnern ist und nicht in der Lage ist, irgendeine Art von Listener daran anzuhängen.Wie hängt man einen Listener an einen JavaFX Spinner an?

Ich bin an Swing-Programmierung gewöhnt, wo ich einen ChangeListener an ein JSpinner anhängen und Ereignisse auf diese Weise empfangen kann, aber JavaFX scheint nichts dergleichen zu haben.

Der Code in Frage ...

IntegerSpinnerValueFactory spinnerValueFactory = new SpinnerValueFactory.IntegerSpinnerValueFactory(0, Integer.MAX_VALUE); 

    hullPointsSpinner = new Spinner<Integer>(spinnerValueFactory); 
    hullPointsSpinner.setEditable(true); 

    ((TextField)hullPointsSpinner.getEditor()).setOnAction(new EventHandler<ActionEvent>() { 

     public void handle(ActionEvent event) 
     { 
     System.out.println("Howdy, folks! Value is " + hullPointsSpinner.getValue() + "!!"); 
     } 
    }); 

Mit den Pfeiltasten wird der Wert im Bereich vergrößern und verkleinern, haben aber keinen Einfluss auf den Wert im Modell. Wenn Sie nur den Inhalt des Felds auswählen und die Eingabetaste drücken, werden die Daten im Modell tatsächlich aktualisiert und der Wert ausgegeben. (Die drückende Enter-Sache ist in der Dokumentation, ich weiß.)

Ich merke auch, dass ich diesen EventHandler mit GetEditor auf das Spinner's TextField setze, aber ich muss noch einen anderen Weg sehen, dies zu tun.

Gibt es eine Möglichkeit, einen Listener an die Schaltflächen des Spinner zu hängen?
(Heck, gibt es sogar eine Möglichkeit, an diese Tasten zu gelangen, um einen Hörer anzuhängen?)

Erhalte ich vom Spinner/Editor ein falsches Ereignistyp? Kann ich eine Art Listener auf die spinnerValueFactory setzen?
Gibt es eine offensichtliche Lösung, die ich hier übersehen habe?

Ich ersetze dies mit einem Jspinner, wenn nötig, aber es scheint mir nur verrückt, dass diese API eine Spinner-Komponente und eine so peinliche Art und Weise haben würde, sie zu benutzen.

Vielen Dank im Voraus.

Antwort

11

Die folgende scheint sie gut zu funktionieren:

hullPointsSpinner.valueProperty().addListener((obs, oldValue, newValue) -> 
    System.out.println("New value: "+newValue)); 

Alternativ Sie wie oben

spinnerValueFactory.valueProperty().addListener(...); 

mit dem gleichen Hörer tun können.

Sie sollten this bug beachten, die in 1.8.0u60 behoben ist.

+0

Vielen Dank !!!!!! Ich kämpfe seit zwei Tagen damit! Immer noch nicht ganz auf JavaFX, aber ich komme dorthin. – BozemanPhil

+0

YW. Nur FYI, das ist im Grunde die Art, wie alle JavaFX-Steuerelemente, die einen Wert speichern (wahrscheinlich alles außer "Button") funktionieren. 'checkBox.selectedProperty(). addListener (...)', 'textField.textProperty(). addListener (...)', 'comboBox.valueProperty(). addListener (...)' usw. –

+0

Vielen Dank sehr viel für die Antwort. – 7twenty7

Verwandte Themen