アプリ版:「スタンプのみでお礼する」機能のリリースについて

何年か振りで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が表示出来ます。

私のやり方は、何か初歩的なミスをしていると思うのですが、ネットで色々調べても分かりませんでした。

どなたか、ご教示願います。

A 回答 (1件)

initialize() メソッドの最後で treeView フィールドに対して新たに TreeView のインスタンスを生成して代入していますが、これが間違いです。


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

(誤)
this.treeView = new TreeView<>(rootItem);

(正)
this.treeView.setRoot(rootItem);
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!