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

一些解决方法是:

  1. 如上所述手动编辑 FXML 以添加 onAction 属性。
  2. 使用 ComboBox 而不是 ChoiceBox。功能相似(虽然不完全相同)并且 ComboBox 可能会满足您的需要。 Scene Builder 确实支持 ComboBox.
  3. onAction 属性
  4. 改为在控制器的 initialize() 方法中注册处理程序。您只需要

    @FXML
    private ChoiceBox<...> categoryDrop ;
    
    public void initialize() {
        categoryDrop.setOnAction(this::folderByCategory);
        // existing code ...
    }
    
    @FXML
    private void folderByCategory(ActionEvent event) {
        // existing code...
    }