java - 使用具有 ObservableList 作为值的 ObservableMap 填充 TableView
问题描述
我正在尝试创建一个 ObservableMap,其中包含自定义对象的 ObservableList 作为这样的值
Map<String, ObservableList<MyClass>> myMap = new HashMap<>();
ObservableMap<String, ObservableList<MyClass>> myObservableMap = FXCollections.observableMap(myMap);
在搜索了 ObservableMap 到 tableview 的绑定之后,我还没有发现如果该值是一个集合会怎么样。我所看到的只是绑定具有自定义类值的可观察地图。我认为它不应该如此不同,因为我只想将键的值绑定到 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 相同的方式与 table 交互。就像选择 tablerow 会返回MyClass
对象(假设已经创建了行工厂)。我已经想出了如何为地图中键值和值的变化添加侦听器。我剩下的唯一问题是将ObservableList<MyClass>
每个键的myObservableMap
. 我怎么可能做到?我希望你能帮助我。谢谢!
解决方案
推荐阅读
- python - PermissionError: [Errno 13] Permission denied to access selenium python through webdriver-manager
- amazon-s3 - 如何使用 postdata preSigned Url 调用 Amazon S3 存储桶以使用空手道上传文件
- microsoft-cognitive - 训练微软 LUIS 区分不想要和想要
- php - 为什么我无法在免费网站上使用 php 代码连接到 msaccess 数据库 (.accdb)
- css - 如何在 vscode 中配置 stylelint 扩展?
- java - 如何将间隔类型格式化为 HH:MM 格式?
- android - 根据风味文件夹内容有条件地应用 gradle 插件
- java - Java Desktop.open() 永远不会完成
- java - 调用存储过程时,休眠查询返回空值
- gerrit - 如何限制 gerrit 存储库选项配置?