JavaFX 只能输入数字或字母,并允许按 TAB/ESCAPE/BACKSPACE 等

标签 java javafx

下面的 Java 正则表达式在我的程序中的 TextField 中运行。它将允许用户仅输入数字[0-9],按键盘TABESCAPE。如何允许按键盘 BACKSPACEDELETE 键?

void restrictNumbersOnly(KeyEvent keyEvent) {
   if (keyEvent.getCharacter().matches("[^\\e\t\r\\d+$]")) {
       /* SOME WARNING MSG */
       keyEvent.consume();
    }
}

keyEvent.getCode() == KeyCode.BACK_SPACE 不起作用。我尝试这样做:

void restrictLettersOnly(KeyEvent keyEvent) {
        if (keyEvent.getCharacter().matches("[^\\e\t\r\\d+$]")) {
            if (keyEvent.getCode() == KeyCode.BACK_SPACE) {
                /* DO NOTHING */
            } else {
                /* SOME WARNING MSG */
                keyEvent.consume();
            }
        }
    }

最佳答案

我更改了问题标题以帮助其他人更好地搜索。

所以,我通过这样做解决了这个问题:

只允许输入字母:

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

只允许输入数字:

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

这些代码还允许用户按ESCAPEDELETEBACKSPACESPACE...等等...

关于JavaFX 只能输入数字或字母,并允许按 TAB/ESCAPE/BACKSPACE 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41107912/

相关文章:

java - 折线未显示在 2 个位置之间,但显示时间和距离

java - 扩展 javafx.scene.chart.LineChart 时出现 NoSuchMethodException <init>()

Treeview、TreeItem/TreeCell 上的 JavaFX 自动换行

java - 如何确定javafx的折线图在监视器上的峰值位置

java - 如何更新 native 构建的 JavaFX 应用程序

Java:添加类路径的技巧

java - 调用http组件时 Camel 线程ID发生变化

java - 如何在不使用 hibernate 覆盖以前的数据的情况下为特定列插入新行

javafx 模块 javafx.scene.media.AudioClip 未找到

java - 在查询数据库时将列表转换为逗号分隔的字符串以传递 SQL 的最佳方法是什么?