在textfield javafx上显示红点

时间:2018-06-15 16:52:49

标签: java javafx

searchField是一个只接受数字的TextField。我用下面的代码做了。

searchField.textProperty().addListener((observable, oldValue, newValue) -> {
  if (!newValue.matches("\\d*")) {
    searchField.setText(newValue.replaceAll("[^\\d]", ""));
  }
});

现在我希望TextField在用户尝试输入字母时显示红色警告。像这样.. example

3 个答案:

答案 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);
    }
});