2011-10-19 4 views
1

私はWindowBuilderとSwingを使用しています。私は、Swing JPanelの上で次のことを行っております:JComponent.revalidateとContainer.validateの選択方法

java.awt.Container.setLayout() 
java.awt.Container.removeAll() 
java.awt.Container.add() 

を終了するには、私が起動します。

java.awt.Container.validate()が、私はjavax.swing.JComponent.revalidate()は、実際には同じことを行うように見えることに気づきました。私は行動の違いを観察していない。 JPanelはContainerとJComponentの両方を継承します。どのようにしてそれらを選ぶのですか?

答えて

1

3つの重要な違い:

  • JComponent#revalidate()Container#validate()がそうしない構成要素が最初に無効になります。
  • JComponent#revalidate()は無効なコンポーネントのリストにコンポーネントを追加し、RepaintManagerはコンポーネントをバッチで検証します。これにより、多くの検証が必要な場合にパフォーマンスが向上する可能性があります。
  • JComponent#revalidate()は、イベントディスパッチスレッドだけでなく、どのスレッドからでも呼び出すことができます。

特別な状況でのみ必要な即時効果が必要な場合を除き、JComponent#revalidate()が優先されます。

関連する問題