このセクションでは、レイアウト・マネージャに関連して発生する可能性のあるいくつかの問題について説明し、回避方法がある場合はその方法を提供します。
問題1: invalidate()
とvalidate()
を呼び出すと、コンポーネントのサイズが増える
原因: GridBagLayout
レイアウト・マネージャのある特性のために、ipadx
またはipady
が設定された状態でinvalidate()
とvalidate()
が呼び出されると、コンポーネントのサイズがipadx
またはipady
の値まで増えます。その理由は、コンテナ内にコンポーネントを格納するために必要な容量を、GridBagLayout
レイアウト・マネージャが反復計算するからです。
回避方法: JDKでは、そのような場合にレイアウト・マネージャがコンポーネントを再配置すべきかどうかを検出する信頼できる簡単な方法を提供しませんが、非常に簡単な回避方法が1つあります。例10-1に示すように、常に現在必要なサイズを返すようにオーバーライドされるメソッドgetPreferredSize()
を持つコンポーネントを使用します。
問題2: Container.doLayout()
メソッドからvalidate()
を呼び出すと、無限再帰が発生する
原因: Container.doLayout()
メソッドからvalidate()
を呼び出すと、AWT自身がvalidate()
からdoLayout()
を呼び出すため、無限再帰が発生する場合があります。