如何在 event.consume() 之后退出 EventHandler?
How to exit EventHandler after event.consume()?
我的代码是:
private EventHandler<KeyEvent> fieldChangeListener(final Integer max_Lengh, final Boolean fullTrimming) {
return new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
TextField field = (TextField) event.getSource();
String text = field.getText();
int lastCharIndex = 0;
if (field.getText().length() > 0) {
lastCharIndex = field.getText().length() - 1;
}
if (field.getText().length() >= max_Lengh) {
System.out.println("Exit 1");
event.consume();
}
if (fullTrimming) {
if (event.getCharacter().matches("\s")) {
System.out.println("Exit 2");
event.consume();
}
} else {
if (field.getText().length() == 0 && event.getCharacter().matches("\s")) {
System.out.println("Exit 3");
event.consume();
} else if (field.getText().substring(lastCharIndex).equals(" ")
&& event.getCharacter().matches("\s")) {
System.out.println("Exit 4");
event.consume();
}
}
Region icon = (Region) ((StackPane)field.getParent()).getChildren().get(1);
text = text+event.getCharacter();
System.out.println("Char: " + text);
即使在事件被消耗后,代码也会继续执行。因此,我可以获得如下输出:
Exit 1
Exit 4
Char: jk i okkl
但我想在 event.consumed()
被触发时立即退出 EventHandler
。我该怎么做?
只需添加几个 return
语句:
if (field.getText().length() >= max_Lengh) {
System.out.println("Exit 1");
event.consume();
return;
}
if (fullTrimming) {
if (event.getCharacter().matches("\s")) {
System.out.println("Exit 2");
event.consume();
return;
}
} else {
...
}
...
那么您可能想稍微重构一下这个方法。通常我们应该只针对一个 return
语句。
更新
这是带有 all 必要的 return
-s:
的代码
public void handle(KeyEvent event) {
TextField field = (TextField) event.getSource();
String text = field.getText();
int lastCharIndex = 0;
if (field.getText().length() > 0) {
lastCharIndex = field.getText().length() - 1;
}
if (field.getText().length() >= max_Lengh) {
System.out.println("Exit 1");
event.consume();
return;
}
if (fullTrimming) {
if (event.getCharacter().matches("\s")) {
System.out.println("Exit 2");
event.consume();
return;
}
} else {
if (field.getText().length() == 0 && event.getCharacter().matches("\s")) {
System.out.println("Exit 3");
event.consume();
return;
} else if (field.getText().substring(lastCharIndex).equals(" ")
&& event.getCharacter().matches("\s")) {
System.out.println("Exit 4");
event.consume();
return;
}
}
Region icon = (Region) ((StackPane)field.getParent()).getChildren().get(1);
text = text+event.getCharacter();
System.out.println("Char: " + text);
return;
}
我的代码是:
private EventHandler<KeyEvent> fieldChangeListener(final Integer max_Lengh, final Boolean fullTrimming) {
return new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
TextField field = (TextField) event.getSource();
String text = field.getText();
int lastCharIndex = 0;
if (field.getText().length() > 0) {
lastCharIndex = field.getText().length() - 1;
}
if (field.getText().length() >= max_Lengh) {
System.out.println("Exit 1");
event.consume();
}
if (fullTrimming) {
if (event.getCharacter().matches("\s")) {
System.out.println("Exit 2");
event.consume();
}
} else {
if (field.getText().length() == 0 && event.getCharacter().matches("\s")) {
System.out.println("Exit 3");
event.consume();
} else if (field.getText().substring(lastCharIndex).equals(" ")
&& event.getCharacter().matches("\s")) {
System.out.println("Exit 4");
event.consume();
}
}
Region icon = (Region) ((StackPane)field.getParent()).getChildren().get(1);
text = text+event.getCharacter();
System.out.println("Char: " + text);
即使在事件被消耗后,代码也会继续执行。因此,我可以获得如下输出:
Exit 1
Exit 4
Char: jk i okkl
但我想在 event.consumed()
被触发时立即退出 EventHandler
。我该怎么做?
只需添加几个 return
语句:
if (field.getText().length() >= max_Lengh) {
System.out.println("Exit 1");
event.consume();
return;
}
if (fullTrimming) {
if (event.getCharacter().matches("\s")) {
System.out.println("Exit 2");
event.consume();
return;
}
} else {
...
}
...
那么您可能想稍微重构一下这个方法。通常我们应该只针对一个 return
语句。
更新
这是带有 all 必要的 return
-s:
public void handle(KeyEvent event) {
TextField field = (TextField) event.getSource();
String text = field.getText();
int lastCharIndex = 0;
if (field.getText().length() > 0) {
lastCharIndex = field.getText().length() - 1;
}
if (field.getText().length() >= max_Lengh) {
System.out.println("Exit 1");
event.consume();
return;
}
if (fullTrimming) {
if (event.getCharacter().matches("\s")) {
System.out.println("Exit 2");
event.consume();
return;
}
} else {
if (field.getText().length() == 0 && event.getCharacter().matches("\s")) {
System.out.println("Exit 3");
event.consume();
return;
} else if (field.getText().substring(lastCharIndex).equals(" ")
&& event.getCharacter().matches("\s")) {
System.out.println("Exit 4");
event.consume();
return;
}
}
Region icon = (Region) ((StackPane)field.getParent()).getChildren().get(1);
text = text+event.getCharacter();
System.out.println("Char: " + text);
return;
}