2012-02-21 7 views
1

私のコードでは、条件に応じてJTreeノードにIconがある場合とない場合があります。 私の問題は、ノードにIconを設定したい場合、ノード名のサイズが小さくなり、 "..."が追加されます。ツリーが生成された後にアイコンを動的に追加するときのJTreeノード名のサイズ変更

基本的に、ノードはアイコンサイズに基づいてそのサイズを再計算し、残りの部分を調整しています。

この動作を防止し、アイコンが追加されたときにノードのサイズを拡大できるようにするにはどうすればよいですか?ここで

はアイコン付き/なしのスクリーンショットです:

enter image description here

+0

'だから、基本的に、ノードは、アイコンのサイズに基づいて、そのサイズをrecaulculatingとrest.'をフィットされます - - >デフォルトでは....のために[TreeModelEventsが正しく行われているかどうかをチェックする]ために、[コード生成](http://sscce.org/)でこの問題が発生することなく、 ](http://stackoverflow.com/a/7663094/714968) – mKorbel

+0

@mKorbel私の質問はうまく形成されていませんが、私がテストケースを書こうと思っていた時、それは非常に長いことが判明したと私は思った多分この問題に対する一般的な解決策があったのかもしれないし、誰かが私を導くかもしれない。私が答えを見つけられない場合、私は質問を –

+1

@ kleopatra +1(答えた!!!!彼はサイズを再計算!!!)の後に変更するでしょう – mKorbel

答えて

6

は、あなたがそれを行う場所を知っていますが、TreeModelのの足の下にそれを行う疑っていない:LayoutCacheにはたくさんいあなたのキャッシュを無効にする必要があります。そうするための唯一の方法はTreeModelEvents経由で、のようなもの(モデルを仮定は、タイプDefaultTreeModelのである):

myNodeData.setIcon(...); 
treeModel.nodeChanged(node); 
+0

あなたの答えをありがとう、私はこのコードを明日試してみる。実際には私自身の 'TreeNode'クラスがあり、' iconName'という属性があります。しかし、私は 'treeModel.nodeChanged(node)'がアイコンを設定しているところでトリックを行い、私はツリーモデルにアクセスできると思います。 –

+0

ありがとうございます、nodeChangedは魅力的に働いていました:)しかし、質問があります。なぜ、nodeChangedやfireTreeNodesChangedのようなツリーでイベントを発生させる2つの方法がありますか? –

+0

"man"をスキップします:-) 2番目は内部使用、最初は外部使用の利便性 - デザインのベストは理想的ではありません(理想的にはモデルは常にその変更を完全に制御する必要があります)が、木の世界では... – kleopatra

関連する問題