javafx选择框触发方法onchange
javafx choicebox to trigger a method onchange
好吧,我对 java 很生疏,对 javafx 更是如此。 so i got a choicebox "categoryDrop" that when the value of the choicebox change i want to trigger this event that then takes the value of the choicebox and compare to an object "Folder" categorylist wich is an attribute it has.
这是我的代码
@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 时,我没有看到任何实现该方法的好方法,因此它在更改时触发。有人知道更好的方法吗?我应该改用监听器吗?
ChoiceBox
有一个 onAction
property,因此在 FXML 中您可以简单地将此控制器方法分配给此 属性:
<ChoiceBox fx:id="categoryDrop" onAction="#folderByCategory" />
遗憾的是,当前版本的 Scene Builder 不支持此功能 属性,因此您无法直接从 Scene Builder 进行设置。当前有一个问题 filed for this。
一些解决方法是:
- 如上所述手动编辑 FXML 以添加
onAction
属性。
- 使用
ComboBox
而不是 ChoiceBox
。功能相似(虽然不完全相同)并且 ComboBox
可能会满足您的需要。 Scene Builder 确实支持 ComboBox
. 的 onAction
属性
改为在控制器的 initialize()
方法中注册处理程序。您只需要
@FXML
private ChoiceBox<...> categoryDrop ;
public void initialize() {
categoryDrop.setOnAction(this::folderByCategory);
// existing code ...
}
@FXML
private void folderByCategory(ActionEvent event) {
// existing code...
}
好吧,我对 java 很生疏,对 javafx 更是如此。 so i got a choicebox "categoryDrop" that when the value of the choicebox change i want to trigger this event that then takes the value of the choicebox and compare to an object "Folder" categorylist wich is an attribute it has.
这是我的代码
@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 时,我没有看到任何实现该方法的好方法,因此它在更改时触发。有人知道更好的方法吗?我应该改用监听器吗?
ChoiceBox
有一个 onAction
property,因此在 FXML 中您可以简单地将此控制器方法分配给此 属性:
<ChoiceBox fx:id="categoryDrop" onAction="#folderByCategory" />
遗憾的是,当前版本的 Scene Builder 不支持此功能 属性,因此您无法直接从 Scene Builder 进行设置。当前有一个问题 filed for this。
一些解决方法是:
- 如上所述手动编辑 FXML 以添加
onAction
属性。 - 使用
ComboBox
而不是ChoiceBox
。功能相似(虽然不完全相同)并且ComboBox
可能会满足您的需要。 Scene Builder 确实支持ComboBox
. 的 改为在控制器的
initialize()
方法中注册处理程序。您只需要@FXML private ChoiceBox<...> categoryDrop ; public void initialize() { categoryDrop.setOnAction(this::folderByCategory); // existing code ... } @FXML private void folderByCategory(ActionEvent event) { // existing code... }
onAction
属性