我希望自己能找到这个(从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”。
我希望我能提供每个细节。我试图使此问题的代码通用。 预先谢谢您,我将等待更多的疑问和担忧。