DefaultTreeCellRenderer
JTree のノードを無効にするカスタマイズがあります。
そのコードは次のとおりです。
static class CustomDefaultTreeCellRenderer extends DefaultTreeCellRenderer{
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus)
{
boolean enabled = true; // <-- here is the logic for enable/disable cell
Component treeCellRendererComponent = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
treeCellRendererComponent.setEnabled(enabled);
return treeCellRendererComponent;
}
}
しかし、私のコードでは使用できません。必要な場所でそれを呼び出すメソッドまたは何かを持つことはできません。たとえば、ボタンが押されたとき、またはアイテムに特定の名前が付いているときなどです。
これは、私のメソッドがモデルをウォークスルーし、与えられた文字列と一致するノードを見つける例です。
protected void walk(TreeModel model, Object o, String word){
int cc;
cc = model.getChildCount(o);
for( int i=0; i < cc; i++) {
Object child = model.getChild(o, i);
if (model.isLeaf(child) && child.toString().equals(word)){
System.out.println(child);
// HERE I NEED TO MAKE "child" DISABLED
}
else {
walk(model,child, word);
}
}
}
これは私CustomDefaultTreeCellRenderer
が自分のツリーに設定する方法です:
tree.setCellRenderer(new CustomDefaultTreeCellRenderer());
そして、これは私の walk メソッドの例です:
walk(tree.getModel(), tree.getModel().getRoot(), "DS.png");
特定のノードを無効にする方法はありますか?