JFrameの最小サイズ

編集者:Terai Atsuhiro
作成日:2003-09-25
更新日:2022-07-07 (木) 14:16:48

概要

JFrameやJDialogの最小サイズを指定します。

サンプルコード

final Dimension minDim = new Dimension(256, 100);
JFrame frame = new JFrame() {
  public void validate() {
    Rectangle rect = getBounds();
    if(minDim.width>rect.width || minDim.height>rect.height) {
      int mw = ((minDim.width>rect.width)?minDim.width:rect.width);
      int mh = ((minDim.height>rect.height)?minDim.height:rect.height);
      setBounds(rect.x, rect.y, mw, mh);
    }
    super.validate();
  }
};

解説

上記のサンプルでは、JFrameなどを縮小する際の最小サイズを設定しています。この制限を超えて縮小しようとしても、マウスを放した時点で設定した最小サイズまでフレームの大きさは戻されます。

最大サイズを制限したい場合も、同じ要領で実装することができます。

上記のサンプルの方法では、フレーム周囲の飾りやタイトルバーのサイズも含まれる点に注意してください。

addComponentListenerを使ってもサンプルと同様のことができます。

final int mw = 256;
final int mh = 100;
final JFrame frame = new JFrame();
frame.addComponentListener(new ComponentAdapter() {
  public void componentResized(ComponentEvent e) {
    int fw = frame.getSize().width;
    int fh = frame.getSize().height;
    frame.setSize((mw>fw)?mw:fw, (mh>fh)?mh:fh);
  }
});

JFrameに追加するJPanelにsetMinimumSize(new Dimension(500, 500))と書いても、レイアウトマネージャがそのサイズを参照しないので意味がありません。

コメント