有没有办法在javafx中有条件地控制鼠标事件

时间:2014-04-10 13:20:53

标签: javafx-2 mouseevent

尝试根据TextField中的值控制消息的显示。我根据TextField框中的某个值输入显示消息时间消息显示。喜欢将鼠标悬停在输入值仍然无效的同时显示相同的消息。看起来我的下面的代码仍然会显示消息,即使输入值已被更改为有效。

...
errorLimit.textProperty().addListener(new ChangeListener<String>() {
      @Override
      public void changed(ObservableValue<? extends String> observable,
              String oldValue, String newValue) {

              if (newValue.trim().length() > 0) {
                int enteredValue = Integer.parseInt(newValue);

                if (enteredValue <1 || enteredValue >25000) {

                  errorLimit.setStyle("-fx-text-fill: red");
                  Dialogs.flash(errorLimit, "The error limit can not be zero or blank or greater than 25,000");

                  if (errorLimit.getStyle().equals("-fx-text-fill: red")) {
                       errorLimit.setOnMouseEntered(new EventHandler<MouseEvent>() {

                          @Override
                          public void handle(MouseEvent t) {
                               Dialogs.flash(errorLimit, "The error limit can not be zero or blank or greater than 25,000");
                          }

                       });
                  }
              } else {

                  errorLimit.setStyle("-fx-text-fill: black");
              }

          }
      }
    });
 ...

知道我怎么能这样做吗?谢谢!

1 个答案:

答案 0 :(得分:0)

只需将if(...)子句置于handle(...)方法...

errorLimit.textProperty().addListener(new ChangeListener<String>() {
      @Override
      public void changed(ObservableValue<? extends String> observable,
              String oldValue, String newValue) {

              if (newValue.trim().length() > 0) {
                int enteredValue = Integer.parseInt(newValue);

                if (enteredValue <1 || enteredValue >25000) {

                  errorLimit.setStyle("-fx-text-fill: red");
                  Dialogs.flash(errorLimit, "The error limit can not be zero or blank or greater than 25,000");


              } else {

                  errorLimit.setStyle("-fx-text-fill: black");
              }

          }
      }
    });

errorLimit.setOnMouseEntered(new EventHandler<MouseEvent>() {

     @Override
     public void handle(MouseEvent t) {
         if (errorLimit.getStyle().equals("-fx-text-fill: red")) {
             Dialogs.flash(errorLimit, "The error limit can not be zero or blank or greater than 25,000");
         }
     }

});

我强烈建议创建一个BooleanProperty来表明该字段是否有效,而不是检查该样式的值;但我想这是一个不同的问题。