0

JTree の一部のノードのラベルは、カウント後に長さが増加するカウンターを表します。その結果、省略形 (...) になります。すべてのノードがいつでもラベル サイズを変更できるツリーがあるとします。

ツリーは、別のスレッドで 100 ミリ秒ごとに再描画 (tree.repaint()) され、追跡されたイベントと時間の経過の結果であるアイコンの変更とラベルの変更を追跡します。すべてのツリー ノードで repaint() メソッドを nodeChanged() 呼び出しに置き換えるアプローチを試みました。ツリーがちらつき始めます。

新しい長さに応じてノード ラベルを更新するには、どうすればよいですか? 私はすでに DefaultTreeCellRenderer を拡張しています。

 public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
    DefaultMutableTreeNode node;
    Object                 nodeValue;
    TestComponent          currentComponent;

    super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);

    node      = (DefaultMutableTreeNode) value;
    nodeValue = node.getUserObject();


    if(nodeValue instanceof TestComponent) {
        currentComponent = (TestComponent) nodeValue;
        setText(currentComponent.getLabel());

    }       
    return this;
}

「setText」の問題を「修正」するには、CellRenderer内で何をすべきですか?

4

1 に答える 1

3

ツリーは別のスレッドで 100 ミリ秒ごとに再描画 (tree.repaint()) され、追跡されたイベントと時間の経過の結果であるアイコンの変更とラベルの変更を追跡します。

TreeModelは、追跡されたイベントに基づいてイベントを発生させる必要があり、JTreeは自動的に更新されます。これらの変更はもちろん、個別の ではなく、EDT で行う必要がありThreadます。

残念ながら、 のサイズJTree(したがって、それに含まれるラベルのサイズ) は、 が含まれる親コンテナーによって制限されJTreeます。そして、このサイズは、あなたのサイズが大きくなっても自動的には大きくなりませんJTree

于 2012-06-20T13:37:28.567 に答える