好吧所以我对我的java非常生疏,甚至更多关于javafx。所以我有一个选择框" categoryDrop"当选择框的值发生变化时,我想触发此事件,然后获取选择框的值并与对象进行比较"文件夹" categorylist它是一个属性。
这是我的代码
@FXML
private void folderByCategory(ActionEvent event) {
System.out.println("här1");
TreeItem<DocumentObject<?>> treeRoot = new TreeItem<>(new Folder());
for (Folder folder : logic.getFolderList()) {
if(f.getCategoryList().contains(categoryDrop.valueProperty())){
System.out.println("här2");
TreeItem<DocumentObject<?>> newFolders = new TreeItem<>(folder);
for(FileReference file : folder.getFileList()){
System.out.println(file.getName());
TreeItem<DocumentObject<?>> fileNode = new TreeItem<>(file);
newFolders.getChildren().add(fileNode);
}
treeRoot.getChildren().add(newFolders);
treeRoot.setExpanded(true);
}
treeNav.setRoot(treeRoot);
}
}
但是当我查看scenebuilder时,我没有看到任何实现方法的好方法,所以它会在它发生变化时触发。有人知道更好的方法吗?我应该使用听众吗?
答案 0 :(得分:3)
ChoiceBox
有一个onAction
property,因此在FXML中您可以简单地将此控制器方法分配给此属性:
<ChoiceBox fx:id="categoryDrop" onAction="#folderByCategory" />
不幸的是,当前版本的Scene Builder不支持此属性,因此您无法直接从Scene Builder中设置它。目前存在问题filed for this。
一些解决方法是:
onAction
属性,如上所述。ComboBox
代替ChoiceBox
。功能类似(虽然不完全相同),ComboBox
可能会满足您的需求。 Scene Builder支持onAction
的{{1}}属性。在控制器的ComboBox
方法中注册处理程序。你所需要的只是
initialize()