ComboBoxTableCell依赖于JavaFx的另一种

时间:2018-11-06 10:10:51

标签: java javafx

我希望自己能找到这个(从James_D找到许多其他有用的答案),但这是我的故事。

1)我有一个 Items 的“中央”存储库,该存储库由对象组成,其参数如下:

listOfItems.add(new Item("ABCD", "typeA", new ArrayList<String>(Arrays.asList("10", "20", "30")))); 
listOfItems.add(new Item("EFGH", "typeB", new ArrayList<String>(Arrays.asList("40", "50", "60"))));

2)我有一个JavaFx的tableView,我想在其中存储(作为行)一些由10个值组成的 Components ,其中这些组件的一部分是来自项目存储库的三列/值(@点号) 1。 这使我创建了如下所示的“ generateCellValueFactory”:

private void generateCellValueFactory(TableColumn<Component, String> column, String name) {
    if(name.equals("Items_string_one")) {
        column.setCellValueFactory(cellData -> cellData.getValue().getProperty(name));
        ArrayList<String> list = itemsRepository.getFirstStrings(); //["ABCD" & "EFGH"]
        generateCombo(column, name,  list);
    } else if (name.equals("Items_lists_of_Strings")) {
        column.setCellValueFactory(cellData -> cellData.getValue().getProperty(name));
        List<String> list = itemsRepository.getUniqueStringsListsOfStrings();
// ! Unfortunately -> this returns me UNIQUE like list of every string inside those so in our case: ["10", "20", "30", "40", "50", "60"]
        generateCombo(column, name, list);
// 8 other columns factories - second string from Item + 7 not a part of "Items" repository. Overall 10 columns.

3)如我们所见,我们已经包含了内部generateCombo方法->因为我希望每个Component的所有十个单元格都为“ ComboBoxTableCells”,并且其中一个负责setCellFactory部分:

private void generateCombo(TableColumn<Component, String> column, String name, List<String> list) {
    ObservableList<String> data = FXCollections.observableArrayList(list);
    if (name.equals("Items_string_one")) {
        column.setCellFactory(new Callback<TableColumn<Component, String>, TableCell<Component, String>>() {
            @Override
            public TableCell<Component, String> call(TableColumn<Component, String> param) {
                ComboBoxTableCell<Component, String> tableCell = new ComboBoxTableCell<Component, String>(data) {
                    @Override
                    public void commitEdit(String x) {
                        // Do something fancy
                     }
                 };
                 return tableCell;
            }
        });
    }else if (name.equals("Items_lists_of_strings")) {
        column.setCellFactory(new Callback<TableColumn<Component, String>, TableCell<Component, String>>() {

            @Override
            public TableCell<Component, String> call(TableColumn<Component, String> param) {
                ComboBoxTableCell<Component, String> tableCell = new ComboBoxTableCell<Component, String>(data) {
                    @Override
                    public void commitEdit(String x) {
                        // Do something fancy
                    }
                };
                return tableCell;
            }
        });
    }

这是我的问题: 现在,当我选择第一列时,我在comboBox选项中具有:
x ABCD / EFGH,这很完美->我在这里很高兴。 我也很高兴,因为所有八个专栏都像魅力一样为我工作。

对于“ Items_lists_of_Strings”列,我可以从每种可能性的唯一列表中进行选择。不错,但也不是我真正想要的,因为我希望计算“ specification_errors-proof”,因此当有人选择ABCD->他在另一栏中可以得到10/20/30。 我想在此ComboBoxTableCell选项中将“绑定”到Items存储库中:

IF->第一列-> ABCD
然后-> ComboBoxTableCell具有“检查”选项:“ 10”,“ 20”,“ 30”。

我希望我能提供每个细节。我试图使此问题的代码通用。 预先谢谢您,我将等待更多的疑问和担忧。

0 个答案:

没有答案