我以ObservableMap<T, Foo>. 要在视图中实现这些数据,我需要以ObservableList<Foo>.
因为我需要 Map Collection 中的数据(以避免重复和其他原因),我想知道是否可以绑定这两个集合。
就像是:
ObservableMap<Integer, Foo> data = FXCollections.observableHashMap();
ObservableList<Foo> target = FXCollections.observableArrayList();
// Won't work
Bindings.bindContent(target, data.values());
Run Code Online (Sandbox Code Playgroud)
绑定,因为数据可以在运行时更改。
编辑: 使用地图值初始化列表不起作用,因为将有附加的 Foo 添加到地图中:使用字符串作为地图值的示例:
ObservableMap<Integer, String> map = FXCollections.observableHashMap();
map.put(1, "a");
map.put(2, "b");
ObservableList<String> list = FXCollections.observableArrayList(map.value());
//map = {1=a, 2=b}
//list = [a, b]
// ok
map.put(3, "c");
//map = {1=a, 2=b, 3=c}
//list = [a, b]
// no update
Run Code Online (Sandbox Code Playgroud) 对于 JFXTreeTableColumn,我编写了一个自定义单元工厂作为回调。代码工作正常,但如果我想传递不同的泛型怎么办?
我已经尝试将泛型作为 ? 或 T, S 但我肯定做错了什么
public class CallbackImpl implements Callback<TreeTableColumn<Order, String>, TreeTableCell<Order, String>> {
private final ObservableList<String> paymentData;
public CallbackImpl(ObservableList<String> paymentData) {
this.paymentData = paymentData;
}
@Override
public TreeTableCell<Order, String> call(TreeTableColumn<Order, String> tc) {
ComboBox<String> combo = new ComboBox<>();
combo.getItems().addAll(paymentData);
JFXTreeTableCell<Order, String> cell = new JFXTreeTableCell<Order, String>() {
@Override
protected void updateItem(String payment, boolean empty) {
super.updateItem(payment, empty);
if (empty) {
setGraphic(null);
} else {
combo.setValue(payment);
setGraphic(combo);
}
}
};
return cell ;
}
}
Run Code Online (Sandbox Code Playgroud)
我想传递一个 Table …