我正在使用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的错误?
答案 0 :(得分:0)
这是因为在将字符添加到文本字段之前调用handle()
。每次打字时,都会发生以下事情:
有一种名为consume()
的方法可以阻止事件进一步传播。只要条件为真,就可以使用它,这样可以防止空间被添加。
if (Character.isWhitespace(e.getCharacter().charAt(0))) {
System.out.println(field.getText());
field.clear();
e.consume();
}