4

私は Swing で作業しており、特定のタイプのノードで展開 (プラス [+]) 記号を無効にしたいと考えています。

私のノードは葉ではなく、私も使用できないため、それを行う方法がわかりませんsetShowsRootHandles(これはルート専用です)。

私はJTreeについて言及しています:私はこの構造を持っていると仮定します:

--[+] ノード 1

--[+] ノード 2

この構造をロードするとき、ノード 2 に [+] 記号が表示されないようにします (特殊なタイプのノードであるため)。しかし、特別なコマンドを使用して拡張したいと考えています。

isLeaf() (DefaultMutableTreeNode のメソッド) をオーバーライドしたので、特別なタイプのノードにいるときは TRUE に設定されますが、それを展開しようとすると isLeaf() = であるため展開されません。 = 真...

これが物事をより明確にすることを願っています。

4

2 に答える 2

1

ハンドルを取り外すことは可能です-他の人が言及したことにもかかわらず. これを行う方法のスニペットを以下に添付しました。重要なことは、でオーバーライドshouldPaintExpandControlすることBasicTreeUIです。

jtree.setUI(new BasicTreeUI() {
    @Override
    protected boolean shouldPaintExpandControl(final TreePath path, final int row
            , final boolean isExpanded, final boolean hasBeenExpanded, final boolean isLeaf)
    {
        boolean shouldDisplayExpandControl = false;
        return shouldDisplayExpandControl;
    }

これは実際には JTree API で文書化する必要がありますが、それは別の問題です。


考慮すべき別のアプローチ:

モデルを呼び出すとDefaultTreeModel(TreeNode root, boolean asksAllowsChildren)、挿入したノードに、子を持つことが許可されているかどうかを「尋ね」ます。できない場合は、展開アイコンを表示しないでください。

javax.swing.tree.TreeNode.getAllowsChildren()クラスで必ずオーバーライドしてください。

于 2013-12-10T13:23:06.630 に答える