【问题标题】:Javafx combobox with checkbox带有复选框的 Javafx 组合框
【发布时间】:2020-04-01 10:14:47
【问题描述】:

我想知道如何更改 javafxml 组合框的 selectionmodel 以便它可以允许多个选择。我尝试在下拉菜单中创建一个带有 CheckBoxes 的 JavaFX ComboBox。我的代码:

public void alLStatus() throws SQLException {

    allStatus.clear();
    cb_statuItem.getItems().clear();
    DbManager test = new DbManager();
    String sql = "SELECT allStatus FROM Items ;";

    Statement stmt = test.connect().createStatement();
    ResultSet rs = stmt.executeQuery(sql);

    while (rs.next()) {
        Items a = new Items();
        a.setStatusItems(rs.getString("statusItems"));
        allStatus.add(a);
    }
    test.disconnect();
    cb_statuItem.setItems(allStatus);

    cb_statuItem.setConverter(new StringConverter<Items>() {
        @Override
        public String toString(Items object) {

            // //System.out.print("converting object: ");
            if (object == null) {
                // //System.out.println("null");
                return "[none]";
            }
            // //System.out.println(object.toString());
            return object.getStatusItems();
        }

        @Override
        public Items fromString(String string) {
            throw new RuntimeException("not required for non editable ComboBox");
        }
    });


    cb_statuItem.setCellFactory(new Callback<ListView<Items>, ListCell<Items>>() {
            @Override
            public ListCell<Items> call(ListView<Items> param) {
                return new ListCell<Items>() {
                    private CheckBox cb = new CheckBox();
                    private BooleanProperty booleanProperty;

                    {
                        cb.setOnAction(e->getListView().getSelectionModel().select(getItem()));
                    }
                    @Override
                    protected void updateItem(Items item, boolean empty) {
                        super.updateItem(item, empty);
                        if (!empty) {


                                booleanProperty = item.selectedProperty();
                                cb.selectedProperty().bindBidirectional(booleanProperty); 
                                setGraphic(cb);
                                setText(item.getStatusItems() + "");

                        } else {
                            setGraphic(null);
                            setText(null);
                        }
                    }
                };
            }
        });



}

ComboBox 显示类似项目状态的文本,但不允许单击复选框,它会自动关闭。 我想从组合框中检查更多项目并将它们放入列表中。 BooleanProperty 总是返回 false。

任何贡献将不胜感激。

【问题讨论】:

  • 您确实注意到您可能会在项目之间创建绑定,因为可以将多个项目一个接一个地添加到同一个单元格中,特别是如果有足够的项目可以显示滚动条?还有为什么要实现things that are already available

标签: javafx checkbox combobox


【解决方案1】:

看看controlsfx,它是JavaFX 组件的库,并且有一个名为 CheckComboBox,这似乎正是你所需要的。

【讨论】:

    【解决方案2】:

    这里是问题的示例示例代码,它可以提供一些新的想法。只是一个如何将 Checkbox 添加到 Combobox 的示例。

    import org.controlsfx.control.CheckComboBox;
    import javafx.collections.ObservableList;
    
    public class ComboUI extends BaseUI implements Initializable {
        @FXML
        private CheckComboBox selector;
        @FXML
        private ComboBox<String> subAcc;
    
        private List<String> filelist;
    
        //These two functions: print_valuefromcheckcombobox & showDropdownValue added to 
        //print and add elements in check-combobox list.
        public void print_valuefromcheckcombobox() {
    
            ObservableList list = selector.getCheckModel().getCheckedItems();
            this.filelist= list;
            this.filelist.forEach(name -> {
                 System.out.println(name);
            }) 
        }
    
        public void showDropdownValue () {
            //Show Dropdown value: Adding elements in Comboobox
            List<String> fileNameList = new ArrayList<>();
            fileNameList.add("First");
            fileNameList.add("Second");
    
            selector.getItems().setAll(fileNameList);
    }
    

    在 fxml 文件中,添加要放置组合框的位置。 (只是一个例子..)

    <?import org.controlsfx.control.CheckComboBox?>
    
    <ComboBox fx:id="subAcc" layoutX="136.0" layoutY="48.0" onAction="#showDropdownValue" prefWidth="150.0" promptText="Select Sub-Account" />    
    <CheckComboBox fx:id="selector" layoutX="157.0" layoutY="25.0" prefHeight="25.0" prefWidth="220.0" />
    

    对于 Maven 项目,添加以下依赖项。

        <dependency>
            <groupId>org.controlsfx</groupId>
            <artifactId>controlsfx</artifactId>
            <version>8.40.14</version>
        </dependency>
        <dependency>
            <groupId>org.controlsfx</groupId>
            <artifactId>controlsfx-samples</artifactId>
            <version>8.40.14</version>
        </dependency>
        <dependency>
            <groupId>org.controlsfx</groupId>
            <artifactId>fxsampler</artifactId>
            <version>1.0.10</version>
        </dependency>
    

    【讨论】:

      猜你喜欢
      • 2014-12-25
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 2012-01-27
      相关资源
      最近更新 更多