コンポーネントのサイズを決定するには、次のいずれかを行う必要があります。
- ある時点で手動で設定しました
- コンポーネントのレイアウトを担当するレイアウトマネージャーを実行します
通常、幅と高さを含む Dimension オブジェクトを返す getSize() メソッドを介してコンポーネントの正確なサイズを取得しますが、getWidth/Height() も機能するはずです。ただし、これは、2 つの前提条件のいずれかが満たされた場合にのみ機能します。ウィンドウが一度も表示されていない場合、ウィンドウ/コンテナーが表示された後にレイアウト マネージャーまたはコンポーネント (サイズを知りたい) が追加されていない場合、サイズは通常ゼロです。
したがって、正しいサイズを取得するには、(コンポーネントを追加した後に) コンテナー/フレームを表示するか、最後のレイアウトの後にコンポーネントを追加した場合は、コンテナーで validate() または doLayout() を呼び出してレイアウトを再計算する必要があります。行われました。心に留めておくべきもう 1 つのことは、コンテナーにレイアウト マネージャーを設定し、おそらく構成することです。レイアウト マネージャーが設定されていない (null) 場合、validate() を呼び出してコンテナーを表示しても、その子のサイズは設定されません。
minimumSize/preferredSize/maximumSize プロパティは、レイアウト マネージャーへのヒントであり、コンポーネントをどのようにサイズ設定するかを示しますが、それらに従う必要はありません(ほとんどのレイアウト マネージャーは従いません)。
編集 2:同じ主題に関する他の質問を読んだ後、 Java チュートリアルのレイアウト マネージャーの使用を読む必要があると思います。
編集:あなたがすでにそれを理解しているかどうかはわかりませんが、ウィンドウのサイズ変更に反応するには、次のようにすることができます:
public class WindowResizeTest extends JFrame {
public static void main(String[] args) {
new WindowResizeTest();
}
public WindowResizeTest() {
this.setSize(640, 480);
JPanel panel = new JPanel();
panel.setBackground(Color.RED);
this.add(panel);
this.addComponentListener(new ComponentListener() {
public void componentResized(ComponentEvent e) {
System.out.println(e.getComponent().getSize());
}
public void componentHidden(ComponentEvent e) {}
public void componentMoved(ComponentEvent e) {}
public void componentShown(ComponentEvent e) {}
});
this.setVisible(true);
}
}