0

DefaultTreeCellRendererJTree のノードを無効にするカスタマイズがあります。

そのコードは次のとおりです。

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");

特定のノードを無効にする方法はありますか?

4

1 に答える 1

2

ノードに対して TreeCellRenderer が呼び出されるタイミングは、Swing フレームワークによって制御されます。これを制御することはできません。CustomDefaultTreeCellRenderer 内で必要な条件 (ノードの名前など) を確認する必要があります。ノードを無効にする必要がない場合は、単に setEnabled() を呼び出さないでください。

于 2015-03-07T19:15:36.870 に答える