2016-06-13 7 views
0

私は3つのJPanel、fatherPanel、childPanel1、childrenPanel2を持っています。再描画とSwingUtilities.updateComponentTreeUIの違いは何ですか?

ボタンをクリックすると、現在の子パネルが親パネルから削除され、親パネル内に別の子が追加されます。

毎回UIを更新するためにrevalidate()とrepaint()を呼び出す必要があります。

次に、私はSwingUtilities.updateComponentTreeUI()が同じ効果を持っていることを知っています。

私は2つの間に違いがあることを知りたいですか?

答えて

2

スイングはプラガブル対応Look-n-Feelです。実行時にL & Fを変更する場合は、updateComponentTreeUIメソッドを使用して、この変更についてすべてのコンポーネントに通知する必要があります。新しいL & Fにより、コンポーネントのサイズを変更することができるため、Swingはrevalidateを呼び出してレイアウトを再計算する必要があります。ここではそうです、あなたはレイアウト変更についてのあなたのGUIを知らせるためにSwingUtilities.updateComponentTreeUIを呼び出すことができる方法updateComponentTreeUI

/** 
* A simple minded look and feel change: ask each node in the tree 
* to <code>updateUI()</code> -- that is, to initialize its UI property 
* with the current look and feel. 
*/ 
public static void updateComponentTreeUI(Component c) { 
    updateComponentTreeUI0(c); 
    c.invalidate(); 
    c.validate(); 
    c.repaint(); 
} 

のコードですが、それは巨大なオーバーヘッドだ(と理論的にはいくつかの副作用を持つことができます)。あなたのケースでは、revalidaterepaintの組み合わせが良いです。

関連する問題