使用JavaFX手动触发CheckComboBox的下拉菜单

时间:2019-01-04 23:56:14

标签: java javafx controlsfx

我有一个CheckComboBox,其中填充了使用以下方法从网站获取的数据。

public void getCompanies() {
        // This method is called every time the user types a letter in the URLText box.
        // Grab data from the website and add the data to a list.
        HTMLParser p = new HTMLParser(URLText.getText());
        List<String> a = p.GetCompanyNames();
        // Remove old data so new data can be added.
        dropdownMultiple.getItems().remove(0, dropdownMultiple.getItems().size());

        for(String element : a) {
            dropdownMultiple.getItems().add(element);
        }
    }

这工作得很好,但是无论何时调用此方法,我都希望CheckComboBox打开下拉菜单。我在CheckComboBox顶部覆盖了一个文本框,因此用户无法单击它。最终,我希望它看起来像一个自动完成下拉菜单,只要用户在文本框中键入,它就会下拉。

换句话说,如何在不让用户单击的情况下激活CheckComboBox的下拉事件?

1 个答案:

答案 0 :(得分:3)

我假设您是在谈论org.controlsfx.control.CheckComboBox。不幸的是,库似乎没有提供以编程方式显示弹出窗口的方法。但是,如果您不介意依靠实施细节,那么有一种方法可以做您想要的事情。

CheckComboBox的皮肤在内部使用JavaFX ComboBox。后一类具有名为show的方法,可用于手动显示弹出窗口。您可以通过调用ComboBox来访问此Node.lookup(String)

CheckComboBox<String> box = new CheckComboBox<>();
((ComboBox<?>) box.lookup(".combo-box")).show();

注意:这要求CheckComboBox在窗口中显示。

提醒一下,这涉及实现细节,因此可能会在没有通知的情况下中断。通过查看源代码,这对ControlsFX 8.40.14和9.0.0均适用。