JavaFX - 在ChangeListener事件中显示警报对话框

时间:2017-04-29 13:36:56

标签: java javafx spinner alert changelistener

我希望在更改微调器的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
    }
  }
});

此代码无法正常运行。显示警报时,微调器会不断减小其值,直到达到最小值。一些建议如何做到这一点?

1 个答案:

答案 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