Spinner JavaFX 的捕获值

Catch value of Spinner JavaFX

我正在尝试获取 Spinner(JavaFX) 的值。但是 return 无效。

来源:

    public class FXMLTeste implements Initializable {
        @FXML 
            private Spinner uni;

        @Override
        public void initialize(URL url, ResourceBundle rb) {       
            uni.setEditable(true);
        }  
        @FXML
        public void actionButton(){
            System.out.println(uni.getValue()); // return NULL
        }
}

fxml

<Spinner fx:id="uni" prefHeight="25.0" prefWidth="342.0"></Spinner>

您需要为微调器设置 valueFactory 以允许 Spinner 的值变为非 null。这可以通过直接分配 属性:

来完成
<Spinner fx:id="uni" prefHeight="25.0" prefWidth="342.0">
    <valueFactory>
        <!-- add factory instance creation here -->
    </valueFactory>
</Spinner>

通过使用适当的构造函数

<Spinner fx:id="uni" prefHeight="25.0" prefWidth="342.0" min="1" max="10" initialValue="4" />

或通过 "manually" 在 initialize 方法中进行:

SpinnerValueFactory valueFactory = ...
uni.setValueFactory(valueFactory);

您还应该为 Spinner 指定类型参数,即使它是通配符 (Spinner<?>),请参阅 What is a raw type and why shouldn't we use it?

做出有根据的猜测,您可能正在寻找这样的东西:

<fx:define>
    <FXCollections fx:factory="observableArrayList" fx:id="unis" /> 
</fx:define>
<Spinner fx:id="uni" prefHeight="25.0" prefWidth="342.0" items="$unis" />

控制器

@FXML
private Spinner<String> uni;

@FXML
private ObservableList<String> unis;

@Override
public void initialize(URL url, ResourceBundle rb) {
    unis.add("Oxford");
    unis.add("Harvard");
}