• 締切済み

JavaFXのTreeViewについて

何年か振りでJavaの勉強を再開しました。JavaFXでウィンドウズのエクスプローラみたいなものを作ってみようと始めたのですが、TreeViewにTreeItemが表示されません。 1.まずFXMLは下記の通りです。 <AnchorPane id="AnchorPane" prefHeight="484.0" prefWidth="857.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="km_immagine.FXMLDocumentController"> <children> <BorderPane prefHeight="484.0" prefWidth="857.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <bottom> <Label prefWidth="857.0" text="Label" /> </bottom> <center> <TableView prefHeight="460.0" prefWidth="633.0"> <columns> <TableColumn prefWidth="75.0" text="列X" /> <TableColumn prefWidth="75.0" text="列X" /> </columns> </TableView> </center> <left> <TreeView fx:id="treeView" prefHeight="200.0" prefWidth="200.0" /> </left> <top> <MenuBar> <menus> <Menu mnemonicParsing="false" text="ファイル"> <items> <MenuItem mnemonicParsing="false" text="閉じる" /> </items> </Menu> <Menu mnemonicParsing="false" text="編集"> <items> <MenuItem mnemonicParsing="false" text="削除" /> </items> </Menu> <Menu mnemonicParsing="false" text="ヘルプ"> <items> <MenuItem mnemonicParsing="false" text="バージョン情報" /> </items> </Menu> </menus> </MenuBar> </top> </BorderPane> </children> </AnchorPane> 2.それに対するコントローラは下記の通りです。 public class FXMLDocumentController implements Initializable { @FXML private TreeView<String> treeView; @Override public void initialize(URL url, ResourceBundle rb) { TreeItem<String> rootItem = new TreeItem<>("root"); TreeItem<String> children01 = new TreeItem<>("children01"); rootItem.getChildren().add(children01); this.treeView = new TreeView<>(rootItem); } } 3.で、下記のメインクラスから表示させても、TreeViewに何も表示されません。 public class KM_Immagine extends Application { @Override public void start(Stage stage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml")); Scene scene = new Scene(root); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); } } メインクラスでAnchorPaneにTreeViewを追加し、それをSceneに追加する方法でなら、TreeItemが表示出来ます。 私のやり方は、何か初歩的なミスをしていると思うのですが、ネットで色々調べても分かりませんでした。 どなたか、ご教示願います。

みんなの回答

  • aoetk
  • ベストアンサー率0% (0/0)
回答No.1

initialize() メソッドの最後で treeView フィールドに対して新たに TreeView のインスタンスを生成して代入していますが、これが間違いです。 @FXML アノテーションを付与したフィールドは、initialize() メソッドに入った時点で、FXML ファイルの内容を元に作られたインスタンスが代入されています。 従って、最後の行で次のように treeView フィールドの setRoot() メソッドを用いて rootItem を設定してあげればいいわけです。 (誤) this.treeView = new TreeView<>(rootItem); (正) this.treeView.setRoot(rootItem);