JTreeとCardLayoutでサイドメニューを作成する
Total: 3468
, Today: 2
, Yesterday: 3
Posted by aterai at
Last-modified:
概要
JTree
のスタイルを変更してサイドメニュー風のコンポーネントを作成し、ノード選択に応じてCardLayout
でのパネル切り替えを実行します。
Screenshot
Advertisement
サンプルコード
TreeModel model = makeModel();
CardLayout cardLayout = new CardLayout();
JPanel p = new JPanel(cardLayout);
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
// Java 9: Collections.list(root.postorderEnumeration()).stream()
Collections.list((Enumeration<?>) root.postorderEnumeration()).stream()
.filter(DefaultMutableTreeNode.class::isInstance)
.map(DefaultMutableTreeNode.class::cast)
.map(node -> Objects.toString(node.getUserObject()))
.forEach(title -> p.add(new JLabel(title), title));
JTree tree = new RowSelectionTree();
tree.setModel(model);
tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.addTreeSelectionListener(e -> {
// https://ateraimemo.com/Swing/CardLayoutTabbedPane.html
Object o = tree.getLastSelectedPathComponent();
if (o instanceof DefaultMutableTreeNode) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) o;
String title = Objects.toString(node.getUserObject());
cardLayout.show(p, title);
}
});
View in GitHub: Java, Kotlin解説
JTree
のスタイルをサイドメニュー風に変更- ルートノードを非表示: JTreeのルートノードを非表示に設定する
- ノード選択をシングルセレクションモードに変更: JTreeの選択モードを切り替える
- ノードアイコンを非表示: JTreeのOpenIcon、ClosedIcon、LeafIconを変更
- 展開、折畳みアイコンを非表示: JTreeの展開、折畳みアイコンを非表示にする
- 初期状態でノードを全展開: JTreeのノードを展開・折り畳み
- ノードを選択可能で折り畳みを不可に設定: JTreeのノードを折り畳み不可に設定する
- 行全体を選択背景色で描画: JTreeを行クリックで選択し、行全体を選択状態の背景色で描画
- ノード選択を
TreeSelectionListener
で取得し対応するタイトルのパネルをCardLayout
で切り替え- JTree#addTreeSelectionListener(...)メソッドを使用してノード選択イベントを取得
- ノードタイトルをキーに
CardLayout
で右パネルの切り替えを実行