2009-08-03 10 views
12

JTreeにチェックボックスを追加する必要があります。カスタムTreeCellRenderer/TreeCellEditorは正しいアプローチのようです。これまで私はthe CheckBoxNodeRenderer approach in this webpageを使っていました。JTree with checkboxes

  1. チェックボックスの上と下に空白が追加されています。私はそれを通常のJTreeと同じにしたいと思います。
  2. チェックボックス自体をクリックすること(チェックボックスの切り替えを試みる必要があります)と、チェックボックスに関連付けられたテキストをクリックすることを区別したいと思います(イベントリスナーがこれを対応するツリーノードをクリックすると解釈する必要があります)。どんな行動であれ、適切なものを取りなさい)

これを行う方法はありますか?私はチェックボックスを使ってJTreeを見回しましたが、それほど多くは見つかりませんでした。 JIDEはうまく見えますが、この場合は無料のオープンソースソフトウェア(GPLは正常ではない、LGPLは大丈夫です)を使用する必要があります。

答えて

7

#2は、パネルをエディタ/レンダラにして、チェックボックスと一緒にラベルを追加することができます。ラベルはテキストになり、チェックボックスはチェックボックスには表示されませんテキストを追加してください。 @aperkins提案あたり

+0

ああ、それはいい考えです、私はそれを考えていませんでした。 –

+1

DefaultTreeCellRendererコードをコピーしてJLabelの拡張子をJPanelに置き換えただけでは、 "パフォーマンスのためにオーバーライドされた"メソッドをたくさん削除する必要があります。そうしないと、空のJTreeが生成されます。 –

4

これは私が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を使用します。

9

私はこの質問が既に回答されているけど、私はいくつかのポイントをクリアしたい:

1)JID​​E共通層)(クラスパス例外と無料の商用ライセンスとGPLのデュアルライセンスです。つまり、ライセンスの問題なしにCommon Layer Projectを使用することができます。確認するには、次のリンクを確認してください:http://www.jidesoft.com/products/oss.htm共通レイヤーには、チェック可能なJTree(com.jidesoft.swing.CheckBoxTree)の実装が含まれています。

2)2005年のマスターであるSanthosh Kumarのブログには、あなたが述べた要件のチェックボックス付きのJTreeの実装方法が説明されています:http://www.jroller.com/santhosh/entry/jtree_with_checkboxes。私の意見では、それを読む価値があります。

+0

+1ライセンスヒントの場合 –

+1

JIDE Common Layerは独自のUIをインストールし、誰かがどのように共有すればよいか知っていれば、修正方法を見つけられなかったので、すべてのcollorスキームを壊しました。 – Bax

2

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

パッケージはJohn ZukowskiのCheckBox Node Tree Sampleコードに基づいています。依存関係のないBSD-2ライセンスです。

ノードタイプをDefaultMutableTreeNodeCheckBoxNodeDataのミックスとマッチングが可能です。また、チェックボックスノードを非リーフノードとしても使用できます。

#1:すべてのプラットフォームでテストしたわけではありませんが、OS Xシステムでは、CheckBoxNodeDataノードのノードの高さは、DefaultMutableTreeNodeノードとまったく同じです。それはJPanelJCheckBox + JLabelを使用しています(aperkinsが示唆するように)(ノードを選択するために)ラベル対チェックボックス(ノードのチェックを外す/チェックする)をクリックすると区別するために:質問の問題#2について

例の用途:

後者の例では、再帰的treeNodesChanged参照(チェックされているボックスに応答してサブツリーをトグルまたはオフするためのコードを有します方法)。