我有TableView
,其中有两列名为Product和Brand。产品可以是不同的品牌。例如。电视有不同的品牌,如三星,索尼等。我在ComboBoxes展示产品品牌。
这就是我为我的品牌专栏添加ComboBoxTableCell
的方法。
ObservableList<String> catList = FXCollections.observableArrayList();
categoryCol.setCellFactory(t -> {
ComboBoxTableCell comboCell = new ComboBoxTableCell(catList);
return comboCell;
});
contactTable.getColumns().add(categoryCol);
现在在这些ComboBoxes中我想添加品牌的价值。由于会有不同的产品,所以他们的品牌也会有所不同。例如
Product | Model
----------------------------------------------
TV | ComboBox[Samsung, Sony, Panasonic]
Monitor | ComboBox[Dell, Microsoft, Apple ]
现在,由于ComboBox具有相同的数据模型(ObservableList),我如何通过选择表中的项目为它们添加不同的值。有可能吗?提前感谢您的帮助。
答案 0 :(得分:1)
首先,您需要一个自定义行类来存储元素,
那么你必须以@Override
来startEdit()
ComboBoxTreeTableCell
,例如这样:
@Override public void startEdit() {
MyCustomRow currentRow = getTableRow().getItem();
getItems().setAll(currentRow.getModels());
super.startEdit();
}
}
MyCustomRow:
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
中,您将只拥有属于产品的那些项目(模型)