java - event.consume()之后如何退出EventHandler?

标签 java events exit

我的代码是:

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 语句。

更新

这里是带有所有必要的返回-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;
}

关于java - event.consume()之后如何退出EventHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45863597/

相关文章:

java - Java 的 sql.Date 会产生 off by one 错误吗?

Python PyQt5 - QEvent Keypress 执行两次

C++ - 程序退出时调试断言失败

java - 一边跳跃一边移动

Java Lucene : Search for terms that include non-alphanumeric characters

javascript - Javascript 事件处理程序未按预期触发

c# - 在 .NET 进程中观看本地进程创建的全局事件

android - 以编程方式退出android应用程序

Bash 退出不退出

java - RCaller:防止自动错误打印