【问题标题】:Arrow key selection does not work to Autocompleated combo box when combo box values are reload java Fx重新加载组合框值时,箭头键选择对自动完成的组合框不起作用 java Fx
【发布时间】:2019-01-18 12:55:49
【问题描述】:

第一次加载程序时,自动完成组合框中的箭头键选择工作。但是在我使用箭头键导航下方的方法清除并重新加载其中的值之后,组合框项目的选择不起作用。 我使用 ControlsFx 8 中的TextFields.bindAutoCompletion 方法来绑定组合框。

// load Auto Compleat nic,fname,lname,id values for search Combo Box
private void loadValuesToComboSearchBox() {
    try {
        // clear elements of Search Combo Box
        comboSearch.getItems().clear();

        // Disable Search Combo Box
        comboSearch.setEditable(false);

        // load Auto Compleat nic,fname,lname,id values for search Text Field
        ResultSet getsearchElements = employeDao.getSearchemployeeByNicFnameLnmeId();
        LinkedHashSet<String> addElements = new LinkedHashSet<>();

        while (getsearchElements.next()) {
            addElements.add(getsearchElements.getString("id"));
            addElements.add(getsearchElements.getString("firstname"));
            addElements.add(getsearchElements.getString("lastname"));
            addElements.add(getsearchElements.getString("nic"));
        }

        // Add elements to Auto Compleat Text Field
        TextFields.bindAutoCompletion(comboSearch.getEditor(), addElements);

        // Enable Search Combo Box
        comboSearch.setEditable(true);
    } catch (Exception e) {
        new Alert(Alert.AlertType.INFORMATION, e + "", ButtonType.OK).showAndWait();
        e.printStackTrace();
    }
}

【问题讨论】:

    标签: java javafx combobox autocomplete controlsfx


    【解决方案1】:

    我相信这个问题是由于几个重叠的AutoCompletionBindings 造成的。 为了解决这个问题,您应该保留对先前绑定的引用并在重新加载时处理它。另外,请注意,要清除 JavaFX 组合框中的选择,应执行更多步骤。

    private AutoCompletionBinding<String> completion;
    ....
    private void loadValuesToComboSearchBox() {
        try {
            // clear selection
            comboSearch.getItems().clear();
            comboSearch.valueProperty().set(null);
            comboSearch.getEditor().clear();
    
            comboSearch.setEditable(false);
            ResultSet getSearchElements = employeDao.getSearchemployeeByNicFnameLnmeId();
            Set<String> addElements = new LinkedHashSet<>();
            while (getSearchElements.next()) {
                addElements.add(getSearchElements.getString("id"));
                addElements.add(getSearchElements.getString("firstname"));
                addElements.add(getSearchElements.getString("lastname"));
                addElements.add(getSearchElements.getString("nic"));
            }
    
            if (completion != null) {
                completion.dispose();
            }
            completion = TextFields.bindAutoCompletion(comboSearch.getEditor(), addElements);
            comboSearch.setEditable(true);
        } catch (Exception e) {
            new Alert(Alert.AlertType.INFORMATION, e + "", ButtonType.OK).showAndWait();
            e.printStackTrace();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-02
      • 2011-10-10
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 2017-03-13
      • 2011-01-06
      • 1970-01-01
      相关资源
      最近更新 更多