searchField
是一个只接受数字的TextField。我用下面的代码做了。
searchField.textProperty().addListener((observable, oldValue, newValue) -> {
if (!newValue.matches("\\d*")) {
searchField.setText(newValue.replaceAll("[^\\d]", ""));
}
});
现在我希望TextField在用户尝试输入字母时显示红色警告。像这样.. example
答案 0 :(得分:0)
如果你将边框的样式设置为红色,如果它不正确,它将模拟你想要看到的内容并在关键事件正确时将其设置回正常
searchField.textProperty().addListener((observable, oldValue, newValue) -> {
if (!newValue.matches("\\d*")) {
searchField.setText(newValue.replaceAll("[^\\d]", ""));
searchField.setStyle("-fx-text-box-border: red; -fx-focus-color: red ;");
//stopIcon.setVisible(true)
}else if(!searchField.getStyle().equals("")){
searchField.setStyle("");
//stopIcon.setVisible(false)
}
});
如果你想要你的照片中的停止标志,你可以加载一个图标并将其设置为可见,并且不会出现代码格栅
答案 1 :(得分:0)
我认为您应该创建自己的控件如下:
- 首先,您需要将TextField
放入Layout
。
- 然后添加一个Label
,感叹号与中心对齐。
- 之后你需要编辑Label
的形状。
- 最后根据输入结果显示这一个的可见性。
答案 2 :(得分:0)
ControlsFX有一个名为CustomTextField的课程,可让您在Node
的左侧或右侧设置TextField
。
至于逻辑(从前面的答案中得到一些),这就是你要做的事情:
ImageView errorView = new ImageView();
errorView.setImage(new Image("error.png"));
CustomTextField searchField = new CustomTextField();
searchField.setRight(errorView);
searchField.textProperty().addListener((observable, oldValue, newValue) -> {
if (!newValue.matches("\\d*")) {
searchField.setText(newValue.replaceAll("[^\\d]", ""));
searchField.setStyle("-fx-text-box-border: red; -fx-focus-color: red ;");
errorView.setVisible(true);
}else if(!searchField.getStyle().equals("")){
searchField.setStyle("");
errorView.setVisible(false);
}
});