13

JTreeにチェックボックスを追加する必要があります。カスタムTreeCellRenderer/TreeCellEditorは正しいアプローチのようです。これまで、このWebページでCheckBoxNodeRendererアプローチを使用しました。次の2つを除いて、問題なく動作します。

  1. チェックボックスの上+下に追加の空白があります。通常のJTreeと同じにしておきたいです。
  2. チェックボックス自体をクリックする(チェックボックスを切り替えようとする)ことと、チェックボックスに関連付けられたテキストをクリックすること(イベントリスナーがこれを対応するツリーノードをクリックしていると解釈してアクションを実行できるようにする必要がある)を区別したいと思います。適切です)

これらのことを行う方法はありますか?チェックボックスのあるJTreeを探しましたが、あまり見つかりませんでした。JIDEは良さそうですが、この場合は無料のオープンソースソフトウェア(GPLは問題ありません、LGPLは問題ありません)を使用する必要があります。(または独自のチェックボックスツリーを作成します)

4

4 に答える 4

9

この質問はすでに回答されていることは知っていますが、いくつかの点を明確にしたいだけです。

1) JIDE Common Layer はデュアル ライセンス (クラスパスの例外を伴う GPL および無料の商用ライセンス) です。これは、ライセンスの問題なしに Common Layer Project を使用できることを意味します。次のリンクで確認してください: http://www.jidesoft.com/products/oss.htm . Common Layer には、チェック可能な JTree (com.jidesoft.swing.CheckBoxTree) の実装が含まれています。

2) マスター自身の Santhosh Kumar による 2005 年からのブログがあります。彼は、あなたが言及した要件を備えたチェックボックス付きの JTree を実装する方法を説明しています: http://www.jroller.com/santhosh/entry/jtree_with_checkboxes。私の意見では、読む価値があります。

于 2012-02-20T12:16:25.490 に答える
8

#2 については、パネルをエディター/レンダラーにして、チェックボックスと共にラベルを追加することができます。ラベルはテキストになり、チェック ボックスにはテキストが追加されません。

于 2009-08-03T17:00:00.067 に答える
4

@aperkins の提案によると、これは私が TableCellRenderer で行ったことであり、うまく機能しているようです:

final private JPanel nodeRenderer = new JPanel();
final private JLabel label = new JLabel();
final private JCheckBox check = new JCheckBox();

     ...

// in constructor:
final Insets inset0=new Insets(0,0,0,0);        
this.check.setMargin(inset0);
this.nodeRenderer.setLayout(new BorderLayout()); 
this.nodeRenderer.add(this.check, BorderLayout.WEST);
this.nodeRenderer.add(this.label, BorderLayout.CENTER);

余白の不要なスペースを取り除くための鍵は、(a) JCheckBox.setMargin() を呼び出してチェックボックスの余白を減らすことと、(b) JPanel の BorderLayout を使用することのようです。

于 2009-08-03T19:35:20.813 に答える
3

私はスタンドアロンのSwing Checkbox Treeプロジェクトをリリースしました。Maven Central から として入手できますorg.scijava:swing-checkbox-tree

このパッケージは、John Zukowski のCheckBox ノード ツリー サンプルコードに基づいています。依存関係のない BSD-2 ライセンスです。

DefaultMutableTreeNodeおよびCheckBoxNodeDataノー​​ド タイプの混合と一致が可能です。チェック ボックス ノードを非リーフ ノードとして使用することもできます。

質問の問題#1について:すべてのプラットフォームでテストしたわけではありませんが、OS Xシステムでは、CheckBoxNodeDataノードはノードとピクセル単位でまったく同じ高さDefaultMutableTreeNodeです。

質問の問題#2に関して:チェックボックスのクリック(ノードのチェック/チェック解除)とラベル(ノードの選択)を区別するために(aperkinsJCheckBoxが示唆するように)に+JLabelを使用します。JPanel

使用例:

後者の例には、ボックスのチェックまたはチェック解除に応答してサブツリーを再帰的にトグルするコードも含まれています (treeNodesChangedメソッドを参照)。

于 2012-10-12T19:49:18.143 に答える