调用初始化方法后,无法加载@FXML TreeView组件

时间:2019-03-16 04:00:05

标签: java javafx treeview fxml

我的目标是加载一个TreeView组件,该组件显示包含密码的文件夹。最终,这些文件夹中的实际文件夹和密码将从数据库中提取出来,但在此之前,我想进行一次试运行以确保TreeView组件能够真正显示。

这是我第一次尝试使用TreeView组件;窗口的其余部分将正确加载,但是TreeView本身不会显示。我已经看了一些youtube视频,并浏览了所有与TreeView相关的Stack Overflow帖子,据我了解,我正确地遵循了这些教程。显然,我做错了事,所以我希望有人可以看看我的代码,也许可以帮助确定我做错了什么(或建议更好的实现)。作为参考,我关注的教程是here

当用户单击登录按钮时,“主”窗口本身将从另一个Controller类加载。登录屏幕使用一个FXML文件,而主窗口使用单独的FXML文件,该文件应加载TreeView。

主控制器:

public class MainController implements Initializable
{
    @FXML
    private BorderPane borderPane;
    @FXML
    private MenuBar menuBar;
    @FXML
    private TreeView<String> treeView;

    //helper method to populate the main nodes
    public ArrayList<TreeItem<String>> getFolders()
    {
        ArrayList<TreeItem<String>> folders = new ArrayList<>();
        //populate the weblogin parent node
        TreeItem<String> webLogins = new TreeItem<>("Web Logins");
        webLogins.getChildren().addAll(getWebLogins());
        //populate the printerLogins parent node
        TreeItem<String> printerLogins = new TreeItem<>("Printer Logins");
        printerLogins.getChildren().addAll(getPrinterPasswords());

        folders.add(webLogins);
        folders.add(printerLogins);

        return folders;
    }
    //create the children nodes related to web logins
    private ArrayList<TreeItem<String>> getWebLogins()
    {
        ArrayList<TreeItem<String>> webLogins = new ArrayList<>();

        TreeItem<String> google = new TreeItem<>("google");
        TreeItem<String> apple = new TreeItem<>("apple");
        TreeItem<String> facebook = new TreeItem<>("facebook");

        webLogins.add(google);
        webLogins.add(apple);
        webLogins.add(facebook);

        return webLogins;
    }
    //create the children nodes related to printer passwords
    private ArrayList<TreeItem<String>> getPrinterPasswords()
    {
        ArrayList<TreeItem<String>> printerPass = new ArrayList<TreeItem<String>>();

        TreeItem<String> konica = new TreeItem<>("Konica Minolta");
        TreeItem<String> ricoh = new TreeItem<>("Ricoh");
        TreeItem<String> hp = new TreeItem<>("Hewlett Packard");

        printerPass.add(konica);
        printerPass.add(ricoh);
        printerPass.add(hp);

        return printerPass;
    }


    @Override
    public void initialize(URL location, ResourceBundle resources)
    {
        ArrayList<TreeItem<String>> allFolders = getFolders();
        treeView = new TreeView<>();
        TreeItem<String> rootNode = new TreeItem<>("Folder Types");
        rootNode.getChildren().addAll(allFolders);
        this.treeView.setRoot(rootNode);
    }
}

主窗口FXML文件:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.TreeView?>
<?import javafx.scene.layout.BorderPane?>

<BorderPane fx:id="borderPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.passwordmanager.gui.controllers.MainController">
   <top>
      <MenuBar fx:id="menuBar" BorderPane.alignment="CENTER">
        <menus>
          <Menu mnemonicParsing="false" text="File">
            <items>
              <MenuItem mnemonicParsing="false" text="Close" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Edit">
            <items>
              <MenuItem mnemonicParsing="false" text="Delete" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Help">
            <items>
              <MenuItem mnemonicParsing="false" text="About" />
            </items>
          </Menu>
        </menus>
      </MenuBar>
   </top>
   <left>
      <TreeView fx:id="treeView" prefHeight="372.0" prefWidth="263.0" BorderPane.alignment="CENTER" />
   </left>
</BorderPane>

在此先感谢所有看过这个的人,并尽力帮助我弄清楚我的错误是什么。

0 个答案:

没有答案