我正在尝试创建一个ObservableMap,它具有自定义对象的ObservableList作为这样的值
Map<String, ObservableList<MyClass>> myMap = new HashMap<>();
ObservableMap<String, ObservableList<MyClass>> myObservableMap = FXCollections.observableMap(myMap);
在搜索了ObservableMap与tableview的绑定之后,我还没有发现值是集合的情况。我所看到的只是具有自定义类值的可观察地图的绑定。我认为它应该没有什么不同,因为我只希望将键的值绑定到表视图,并跟踪键及其内部值的变化。
这是我到目前为止所做的:
Map<String, ObservableList<DMSchedule>> myMap = new HashMap<>();
ObservableMap<String, ObservableList<DMSchedule>> myObservableMap = FXCollections.observableMap(myMap);
TableColumn<DMSchedule, String> dayColumn;
TableColumn<DMSchedule, String> subjectNameColumn;
TableColumn<DMSchedule, String> startTimeColumn;
TableColumn<DMSchedule, String> endTimeColumn;
@FXML
private TableView<DMSchedule> myTable;
@Override
public void initialize(URL url, ResourceBundle rb) {
final ListChangeListener<DMSchedule> listListener = new ListChangeListener<DMSchedule>() {
@Override
public void onChanged(ListChangeListener.Change<? extends DMSchedule> change) {
System.out.println("Detected a change!");
while (change.next()) {
System.out.println(change.getFrom());
System.out.println("Added on list? " + change.wasAdded());
System.out.println("Removed on list? " + change.wasRemoved());
}
}
};
dayColumn = new TableColumn<DMSchedule, String>("Day");
subjectNameColumn = new TableColumn<DMSchedule, String>("Subject");
startTimeColumn = new TableColumn<DMSchedule, String>("Start Time");
endTimeColumn = new TableColumn<DMSchedule, String>("End Time");
myObservableMap.addListener((MapChangeListener<String, ObservableList<DMSchedule>>) mapChange -> {
if (mapChange.wasAdded()) {
mapChange.getValueAdded().addListener(listListener);
}
if (mapChange.wasRemoved()) {
mapChange.getValueRemoved().addListener(listListener);
}
});
myObservableMap.put("M", FXCollections.observableArrayList());
myObservableMap.get("M").add(new DMSchedule("M", "07:00", "08:30", "testSubj", "testSection"));
myListOfMap.addAll(myObservableMap);
myTable.getColumns().addAll(dayColumn, subjectNameColumn, startTimeColumn, endTimeColumn);
myTable.setItems(myObservableMap);
我有点迷茫,如何将我的ObservableList值设置为表和列。
我想与表进行交互,就像将ObservableList绑定到tableview一样。就像选择表行将返回MyClass
对象(假设已建立行工厂)。我已经想出了如何为映射中的键和值的值添加侦听器。我剩下的唯一问题是将ObservableList<MyClass>
内的每个键的myObservableMap
绑定在一起。我怎么可能呢?我希望你能帮助我。谢谢!