我希望在更改微调器的valueProperty时显示警告对话框。因此我在我的valueProperty中添加了一个ChangeListener:
this.spinnerColumns.setValueFactory(new SpinnerValueFactory.IntegerSpinnerValueFactory(2,20));
this.spinnerColumns.getValueFactory().valueProperty().addListener((observable, oldValue, newValue) -> {
if(oldValue > newValue) {
// Ask for permission
System.out.println("Ask for permission");
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle("Error");
alert.setHeaderText("Ask something...");
alert.showAndWait();
if(alert.getResult() == ButtonType.OK) {
// do something
}
}
});
此代码无法正常运行。显示警报时,微调器会不断减小其值,直到达到最小值。一些建议如何做到这一点?
答案 0 :(得分:0)
据我所知,如果不使用反射就很难停止旋转...试试这段代码。
if(oldValue > newValue) {
try {
Skin<?> skin = this.spinnerColumns.getSkin();
Object behavior = skin.getClass().getMethod("getBehavior").invoke(skin);
behavior.getClass().getMethod("stopSpinning").invoke(behavior);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
return; // If refleciton failed, do nothing
}
// Ask for permission