Swing/TreeNodeMaxLevel のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/TreeNodeMaxLevel へ行く。
- 1 (2017-02-20 (月) 19:40:38)
- 2 (2017-02-28 (火) 17:51:53)
- 3 (2017-04-07 (金) 14:17:04)
- 4 (2017-08-07 (月) 14:46:28)
- 5 (2018-02-15 (木) 14:23:42)
- 6 (2018-08-08 (水) 20:17:40)
- 7 (2019-05-22 (水) 19:35:38)
- 8 (2019-12-10 (火) 17:26:35)
- 9 (2021-06-10 (木) 20:47:14)
- 10 (2023-12-03 (日) 16:49:51)
- 11 (2025-01-03 (金) 08:57:02)
- 12 (2025-01-03 (金) 09:01:23)
- 13 (2025-01-03 (金) 09:02:38)
- 14 (2025-01-03 (金) 09:03:21)
- 15 (2025-01-03 (金) 09:04:02)
- category: swing folder: TreeNodeMaxLevel title: JTreeでノード階層の深さを取得する tags: [JTree, TreePath, DefaultMutableTreeNode] author: aterai pubdate: 2016-09-12T01:36:56+09:00 description: JTreeでノード階層の深さ(TreePath内の要素数)を取得し、それに応じてノード追加の制限を行います。 image: https://drive.google.com/uc?export=view&id=1ozunqsWtmzdel3isGcmth6R1GRxkSju28Q
概要
JTree
でノード階層の深さ(TreePath
内の要素数)を取得し、それに応じてノード追加の制限を行います。
Screenshot

Advertisement
サンプルコード
private void updateLabel(TreePath path) {
countLabel.setText("PathCount: " + path.getPathCount());
Object o = path.getLastPathComponent();
if (o instanceof DefaultMutableTreeNode) {
DefaultMutableTreeNode n = (DefaultMutableTreeNode) o;
levelLabel.setText("Level: " + n.getLevel());
}
}
//...
JTree tree = (JTree) getInvoker();
TreePath path = tree.getSelectionPath();
if (path.getPathCount() < 3) {
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
DefaultMutableTreeNode self = (DefaultMutableTreeNode) path.getLastPathComponent();
DefaultMutableTreeNode child = new DefaultMutableTreeNode("New child node");
self.add(child);
model.reload(self);
} else {
JOptionPane.showMessageDialog(tree, "ERROR: Maximum levels of 2 exceeded.");
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、TreePath#getPathCount()
、またはDefaultMutableTreeNode#getLevel()
メソッドを使用してノード階層の深さを取得し、指定したレベルを超えるノードを作成できないように制限しています。
- メモ:
- ルートパスの
TreePath#getPathCount()
は1
、ルートノードのDefaultMutableTreeNode#getLevel()
は0
TreePath#getPathCount()
、DefaultMutableTreeNode#getLevel()
の返り値は、ルートノードの可視・不可視には依存しない
- ルートパスの