Spinner JavaFX的捕获值

时间:2016-03-07 13:03:22

标签: java javafx fxml

我试图获得Spinner(JavaFX)的价值。但是返回null。

来源:

    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>

1 个答案:

答案 0 :(得分:1)

您需要为微调器设置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" />

或通过“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");
}