5

JTree の項目の右側に小さなアイコンの付いたボタンを追加したいと考えています。これはできますか?もしそうなら、どのように?

ありがとう!

4

4 に答える 4

5

クランプ、

これで成功しましたか?同じことをしたかったので、JButtonがユーザーに応答するのに苦労しました。ボタンを表示するようにレンダラーを設定するのはスムーズでしたが、すべてのマウスイベントはJTree自体によって処理され、ボタンに渡されませんでした。

私はついに解決策を見つけ、他の人がコメントできるようにここに投稿すると思いました(おそらくもっと良い方法がありますか?)

カスタムレンダラーに加えて、DefaultTreeCellEditorを拡張するカスタムエディターも作成しました。カスタムレンダラーは、コンストラクターを介してカスタムエディターに渡されます。エディターで、isCellEditableをオーバーライドしてtrueを返し、getTreeCellEditorComponentをオーバーライドしてrenderer.getTreeCellRendererComponentを返します。これが鍵でした。レンダラーコンポーネントを返すため、すべてのクリックがカスタムレンダラー内のパネルに渡され、JButtonがアクションイベントに正常に応答します。

これが私の編集者です:

public class MyTreeCellEditor extends DefaultTreeCellEditor  {



    public MyTreeCellEditor(JTree tree, DefaultTreeCellRenderer renderer) {
        super(tree, renderer);
    }

    public Component getTreeCellEditorComponent(JTree tree, Object value,
            boolean isSelected, boolean expanded, boolean leaf, int row) {
        return renderer.getTreeCellRendererComponent(tree, value, true, expanded, leaf, row, true);
    }

    public boolean isCellEditable(EventObject anEvent) {
        return true; // Or make this conditional depending on the node
    }
}

ツリーで、必ずカスタムエディタを設定してください。

myTree.setCellEditor(new MyTreeCellEditor(myTree, (DefaultTreeCellRenderer) myTree.getCellRenderer()));
于 2010-09-22T12:24:36.900 に答える
3

TreeCellRendererを実装するCustomCellRendererを作成し、それをJTreeにアタッチする必要があります。

CustomCellRendererには、ボタンとアイコンを配置できます。

JTree tree = new JTree(rootVector);
TreeCellRenderer renderer = new CustomCellRenderer();
tree.setCellRenderer(renderer);

この例を確認してください:(ここから上記のコードを参照)

http://www.java2s.com/Code/Java/Swing-JFC/TreeCellRenderer.htm

于 2010-08-18T08:57:08.743 に答える
1

JTree Javadocから:

JTreeを使用して複合ノード(たとえば、グラフィックアイコンとテキストの両方を含むノード)を表示するには、サブクラスjavax.swing.tree.TreeCellRenderersetCellRendererして、ツリーにそれを使用するように指示します。

複合ノードはあなたが望むものです。Compositeあなたは、あなたの場合、ボタンとラベルを並べて含む小さなパネルにあるオブジェクトを返す単一のメソッドに実装する必要があります。

于 2010-08-18T08:55:56.650 に答える
1

TreeCellRenderer を JTree に追加できます。この Renderer は、ツリーの各要素に Icon をレンダリングできます。

于 2010-08-18T08:52:30.743 に答える