1

私はJTreeを持っています

JTree tree = new JTree();
tree.setCellRenderer(// ...);
tree.setCellEditor(// ...);
tree.setEditable(true);

セルレンダラーを使用してセルを表示します。セルをクリックすると、セル エディタを使用して表示されます。セル エディタを使用してのみ表示できる方法はありますか?

  1. レンダラーを削除しようとしました。JTree はデフォルトのセル レンダラーを使用するため、これは機能しません。
  2. これはこの質問に似ていますが、その質問には私の特定の質問に関連する回答が含まれていないようです。
4

2 に答える 2

1

最も簡単な方法は、関連する TreeCellEditor コンポーネントを返す TreeCellRenderer を作成することです。

次のようなことを試してください:

        tree.setCellRenderer(new TreeCellRenderer() {
        @Override
        public Component getTreeCellRendererComponent(
                JTree tree, Object value, 
                boolean selected, boolean expanded,
                boolean leaf, int row, boolean hasFocus) {
            return tree.getCellEditor().getTreeCellEditorComponent(tree, value, 
                                                      selected, expanded, leaf, row);
        }

    });
于 2013-02-26T17:44:09.040 に答える
0

セル エディターとレンダラーの問題は、1 つの GUI コンポーネントを再利用してリスト内のすべての要素を描画し (レンダラー)、一度に 1 行しか編集できない (エディター) ことです。この単一の GUI コンポーネントの規則を破ると、Swing GUI の動作がぎこちなくなり、遅くなるか、完全に壊れることさえあります。

つまり、セル レンダラーに編集コンポーネント (dropdiwn など) を使用すると、リストの各要素に同じ JComboBox を使用する必要があるため、問題が発生します。ツリー要素ごとに異なるレンダラー オブジェクトを作成すると、メモリの問題やその他の異常な動作が発生します。

本当にレンダラーにドロップダウンを使用したい場合は、呼び出されたときに一意の JComboBox インスタンスを返す TreeCellRenderer を自分で実装することで実現できますpublic Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus)

于 2013-02-26T17:48:56.137 に答える