【问题标题】:Is there way to conditionally control mouse event in javafx有没有办法在javafx中有条件地控制鼠标事件
【发布时间】:2014-04-12 00:12:53
【问题描述】:

尝试根据 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");
              }

          }
      }
    });
 ...

知道我该怎么做吗?谢谢!

【问题讨论】:

    标签: javafx-2 mouseevent


    【解决方案1】:

    只需将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 来指示该字段是否有效,而不是检查样式的值;但我猜这是另一个问题。

    【讨论】:

      猜你喜欢
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多