JavaFX TreeViewのサンプルコード
JavaFXでツリービュー(TreeView)を使ってみたので、サンプルプログラムも作ってみました。
ツリービューは、アイテムをツリー構造で表示でき、子の表示を表示/非表示したりできます。
Swingではなかった機能ですが、メニューとして使いやすそうですね。
ツリー構造の作成手順
まず、TreeItemを用意します。
TreeItem[] ti = new TreeItem[16];
ti[0] = new TreeItem( "TOP" );
ti[1] = new TreeItem( "部屋" );
ti[2] = new TreeItem( "ボディ" );
ti[3] = new TreeItem( "服" );
TreeItem間に親子関係を付けます。
for(int i=1;i<4;i++){ ti[0].getChildren().add(ti[i]); }
全てのTreeItemに親子関係をつけ終えたら、TreeViewを定義して、一番上のTreeItemを指定します。
TreeView tree = new TreeView( ti[0] );
このTreeViewをPaneに貼りつければ完成。
ツリーをあらかじめ展開する
ツリー構造を展開して、子アイテムを最初から表示する場合は、展開する親アイテムを下記のように展開指定します。
ti[0].setExpanded(true);
サンプルプログラム
コードを実行すると、下記の結果が得られます。
package tomojavalib.fx;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.*;
import javafx.stage.Stage;
/**TreeViewの試験Class*/
public class TreeViewTest extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("TreeView試験");
TreeItem[] ti = new TreeItem[16];
ti[0] = new TreeItem( "TOP" );
ti[1] = new TreeItem( "部屋" );
ti[2] = new TreeItem( "ボディ" );
ti[3] = new TreeItem( "服" );
for(int i=1;i<4;i++){ ti[0].getChildren().add(ti[i]); }
ti[4] = new TreeItem( "照明" );
ti[5] = new TreeItem( "カメラ" );
ti[6] = new TreeItem( "壁1" );
ti[7] = new TreeItem( "壁2" );
ti[8] = new TreeItem( "床" );
for(int i=4;i<9;i++){ ti[1].getChildren().add(ti[i]); }
ti[9] = new TreeItem( "布" );
ti[10] = new TreeItem( "身頃" );
ti[11] = new TreeItem( "縫合" );
for(int i=9;i<12;i++){ ti[3].getChildren().add(ti[i]); }
TreeView tree = new TreeView( ti[0] );
ti[0].setExpanded(true);
FlowPane root = new FlowPane();
root.getChildren().add(tree);
primaryStage.setScene(new Scene(root, 200, 250));
primaryStage.show();
}
}
画像を追加する
アイテムに画像を追加する場合は、画像を読み込んで、
private final Node Icon = new ImageView( new File( "d:/work/java/a.png" ).toURI().toString() );
アイテム作成時に追記する。
ti[0] = new TreeItem( "TOP" , Icon);
実行結果
イベントを追加する
マウスでどのTreeItemが選択されたかを知るには、TreeViewの設定後に下記のようにイベントを設定する。
tree.getSelectionModel().selectedItemProperty().addListener( new ChangeListener() {
@Override
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
TreeItem selectedItem = (TreeItem) newValue;
//System.out.println("Selected Text : " + selectedItem.getValue());
TreeViewTest.this.mouseClick( selectedItem );
}
});
イベントを受けて処理するメソッドも用意しておく。
FlowPane root = new FlowPane();
root.getChildren().add(tree);
primaryStage.setScene(new Scene(root, 320, 240));
primaryStage.show();
}
最終更新日: 2017-04-06 16:30:03