javafx选择框触发方法onchange

时间:2018-02-05 13:49:48

标签: java javafx scenebuilder

好吧所以我对我的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时,我没有看到任何实现方法的好方法,所以它会在它发生变化时触发。有人知道更好的方法吗?我应该使用听众吗?

1 个答案:

答案 0 :(得分:3)

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支持onAction的{​​{1}}属性。
  3. 在控制器的ComboBox方法中注册处理程序。你所需要的只是

    initialize()