【问题标题】:Adding values to selected javafx ComboBoxTableCell dynamically动态地将值添加到选定的 javafx ComboBoxTableCell
【发布时间】:2017-06-02 00:37:08
【问题描述】:

我有一个 TableView,其中包含名为 Product 和 Brand 的两列。一个产品可以是不同的品牌。例如。电视有不同的品牌,如三星、索尼等。我在 ComboBoxes 中展示产品的品牌。

这就是我为我的品牌专栏添加ComboBoxTableCell 的方式。

    ObservableList<String> catList = FXCollections.observableArrayList();

    categoryCol.setCellFactory(t -> {   
        ComboBoxTableCell comboCell = new ComboBoxTableCell(catList);
        return comboCell;
    });
    contactTable.getColumns().add(categoryCol);

现在我想在这些组合框中添加品牌值。因为会有不同的产品,所以他们的品牌也会不同。例如。

Product  |  Model
----------------------------------------------
TV       |  ComboBox[Samsung, Sony, Panasonic] 
Monitor  |  ComboBox[Dell, Microsoft, Apple ]

现在,由于 ComboBoxes 具有相同的数据模型 (ObservableList),我如何通过选择表中的项目向它们添加不同的值。有可能吗?提前感谢您的帮助。

【问题讨论】:

    标签: javafx javafx-2 javafx-8


    【解决方案1】:

    首先你需要一个自定义的行类来存储元素, 那么你必须从ComboBoxTreeTableCell@Override startEdit() 例如这样:

    @Override public void startEdit() {
        MyCustomRow currentRow = getTableRow().getItem();
        getItems().setAll(currentRow.getModels());
            super.startEdit();
        }
    }
    

    我的自定义行:

    package mypackage;
    
    import javafx.beans.property.SimpleStringProperty;
    
    import java.util.List;
    import java.util.Map;
    
    public class MyCustomRow {
    
        private SimpleStringProperty product;
    
        private SimpleStringProperty model;
    
        private List<String> allModels;
    
        public MyCustomRow(
                String product,
                String model,
                List<String> models) {
            this.product = new SimpleStringProperty(product);
            this.model = new SimpleStringProperty(product);
            this.allModels = models;
       }
    
        public String getProduct() {
            return product.get();
        }
    
        public SimpleStringProperty productProperty() {
            return product;
        }
    
        public String getModel() {
            return model.get();
        }
    
        public SimpleStringProperty modelProperty() {
            return model;
        }
    
        public List<String> getModels() {
            return allModels;
        }
    }
    

    然后在你的控制器类中你可以说:

    ObservableList<String> carList = FXCollections.observableArrayList();
    
        categoryCol.setCellFactory(t -> new ComboBoxTableCell(carList){
             @Override public void startEdit() {
                MyCustomRow currentRow = getTableRow().getItem();
                getItems().setAll(currentRow.getModels());
                super.startEdit();
            }
        });
        categoryCol.setCellValueFactory(v -> v.getValue().modelProperty());
        contactTable.getColumns().add(categoryCol);
    

    因此,您在每一行添加适当的模型。因此,在ComboBox 中,您将只有属于该产品的那些项目(模型)

    【讨论】:

      猜你喜欢
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      相关资源
      最近更新 更多