Swing/VerticalNavigationMenu のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/VerticalNavigationMenu へ行く。
- category: swing folder: VerticalNavigationMenu title: JTreeとCardLayoutでサイドメニューを作成する tags: [JTree, CardLayout, TreeSelectionListener] author: aterai pubdate: 2017-10-02T15:53:07+09:00 description: JTreeのスタイルを変更してサイドメニュー風のコンポーネントを作成し、ノード選択に応じてCardLayoutでのパネル切り替えを実行します。 image: https://drive.google.com/uc?export=view&id=1HtdjEFvmcBet6Qv2s2zHMZWTgzkb2rcqqQ
概要
JTree
のスタイルを変更してサイドメニュー風のコンポーネントを作成し、ノード選択に応じてCardLayout
でのパネル切り替えを実行します。
Screenshot
Advertisement
サンプルコード
TreeModel model = makeModel();
CardLayout cardLayout = new CardLayout();
JPanel p = new JPanel(cardLayout);
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
Enumeration en = root.postorderEnumeration();
while (en.hasMoreElements()) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) en.nextElement();
String title = Objects.toString(node.getUserObject());
p.add(new JLabel(title), title);
}
JTree tree = new RowSelectionTree();
tree.setModel(model);
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.addTreeSelectionListener(e -> {
// http://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
で右パネルの切り替えを実行