概要

JTreeのスタイルを変更してサイドメニュー風のコンポーネントを作成し、ノード選択に応じてCardLayoutでのパネル切り替えを実行します。

スクリーンショット

Swing/VerticalNavigationMenu.png

サンプルコード

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

解説

参考リンク

コメント