尝试根据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");
}
}
}
});
...
知道我怎么能这样做吗?谢谢!
答案 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
来表明该字段是否有效,而不是检查该样式的值;但我想这是一个不同的问题。