【问题标题】:AutoComplete ComboBox in JavaFX without Lambda Expressions没有 Lambda 表达式的 JavaFX 中的自动完成组合框
【发布时间】:2017-08-17 17:19:47
【问题描述】:

我阅读了AutoComplete ComboBox in JavaFX,但点赞最多的答案使用了 Lambda 表达式。

在我的项目中我不能使用它们,所以我想问一下是否有人可以提供没有 lambda 表达式的代码。

下面是带有 lambda 表达式的代码的两部分:

1)

comboBox.getEditor().focusedProperty().addListener(observable -> {
            if (comboBox.getSelectionModel().getSelectedIndex() < 0) {
                comboBox.getEditor().setText(null);
            }
        });

2)

comboBox.addEventHandler(KeyEvent.KEY_PRESSED, t -> comboBox.hide());

【问题讨论】:

  • 每个 lambda 表达式都可以转换为匿名类。然而,不允许在 javafx 8 中使用 lambdas 似乎是一个荒谬的约束,因为 API 中有使用 lambdas 的类...
  • 我用的是第7版,只是想在javafx-8下打标签,让懂lamda表达式的人看到这个。
  • 您应该能够通过查看以下两种方法的文档来确定如何编写非 lambda 实现:Observable.addListenerNode.addEventHandler。假设你熟悉编写匿名类,那就是。

标签: java lambda combobox javafx-8


【解决方案1】:

您的 IDE 应该能够来回转换。下面是在 Eclipse 中使用它的示例。

1)

comboBox.getEditor().focusedProperty().addListener(new InvalidationListener() {
            @Override
            public void invalidated(Observable observable) {
                 if (comboBox.getSelectionModel().getSelectedIndex() < 0) {
                     comboBox.getEditor().setText(null);
                 }
            }
        });

2)

comboBox.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent t) {
                comboBox.hide();
            }
        });

希望对您有所帮助。

【讨论】:

  • 非常感谢。我使用 IntelliJ,然后我没有找到该选项?
  • 我认为只有在启用 Java 8 时才会显示该选项。
【解决方案2】:

如果您愿意使用外部库,您可以使用 ControlsFX 用几行代码创建一个自动完成的 ComboBox。

ComboBox<String> comboBox = new ComboBox<>();
comboBox.getItems().addAll("Hello", "Hello World", "Hey");
comboBox.setEditable(true);
TextFields.bindAutoCompletion(comboBox.getEditor(), comboBox.getItems());

【讨论】:

    猜你喜欢
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2013-02-21
    • 2014-08-16
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    相关资源
    最近更新 更多