JavaComboxTableCell依赖于JavaFx的另一个同类
我希望我自己能找到这个(从James_D那里找到了许多其他有用的答案),但这是我的故事
1)我有一个项目的“中央”存储库,由参数如下的对象组成:
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个值组成,其中一部分是第1点提到的Items repository中的三列/值。 这让我创建了“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)正如我们所看到的,我们包括了内部生成的mbo方法->;因为我希望每个组件的所有十个单元都是“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;
}
});
}
我的问题是:
现在,当我选择组合框选项中的第一列时:
x ABCD/EFGH,这是完美的->;我在这里很高兴。
我也很高兴,因为她所有的八个专栏都在为我工作
对于“项目列表”列,我可以从各种可能性的唯一列表中进行选择。不错,但也不是我真正想要的,因为我想让计算“防规范错误”,所以当有人选择ABCD->;他可以在另一列得到10/20/30。 在这个ComboBoxTableCell中,我想将选项“绑定”到项目存储库:
如果->;第一列->;ABCD
然后->;ComboBoxTableCell有选项“要检查”:“10”、“20”、“30”
我希望我能提供每一个细节。我试图让这个问题的代码变得通用。 提前感谢您,我将等待任何进一步的问题和关注
共 (0) 个答案