JTreeでノード階層の深さを取得する
Total: 4561
, Today: 3
, Yesterday: 3
Posted by aterai at
Last-modified:
概要
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()
の戻り値はJTree#setRootVisible(boolean)で設定したルートノードの可視・不可視には依存しない
参考リンク
- TreePath#getPathCount() (Java Platform SE 8)
- DefaultMutableTreeNode#getLevel() (Java Platform SE 8)
- JTreeの各ノードタイトルに章番号を自動追加して表示する