清除JavaFx中的TextField后的空格

时间:2015-10-28 04:13:40

标签: java javafx

我正在使用JavaFX创建一个应用程序,并想知道清除TextField后为什么会有空格。以下代码是发生此错误的地方。

    TextField field = new TextField();  

    field.setPromptText("Start typing!");

    field.setOnKeyTyped(e -> {

        if (Character.isWhitespace(e.getCharacter().charAt(0))) {

            System.out.println(field.getText());
            field.clear();
        }
    });

添加简单的if语句后,这是一个简单的修复。

    TextField field = new TextField();  

    field.setPromptText("Start typing!");

    field.setOnKeyTyped(e -> {

        if (Character.isWhitespace(e.getCharacter().charAt(0))) {

            if (Character.isWhitespace(field.getText().charAt(0)))
                field.setText(field.getText().substring(1, field.getText().length()));

            System.out.println(field.getText());
            field.clear();
        }
    });

但是,在我清除文本field.clear();或将文本设置为空字符串field.setText("");之后,这并没有告诉我为什么有空格。有没有办法在不添加空格的情况下清除文本,或者这只是TextFields的错误?

1 个答案:

答案 0 :(得分:0)

这是因为在将字符添加到文本字段之前调用handle()。每次打字时,都会发生以下事情:

  • 调用handle方法,它检查字符,清除文本字段。
  • 然后,文本字段在从方法返回后将字符添加到文本字段中。

有一种名为consume()的方法可以阻止事件进一步传播。只要条件为真,就可以使用它,这样可以防止空间被添加。

if (Character.isWhitespace(e.getCharacter().charAt(0))) {
   System.out.println(field.getText());
   field.clear();
   e.consume();
}