TITLE:JFrameの最小サイズ

Posted by terai at 2003-09-25

JFrameの最小サイズ

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

  • &jnlp;
  • &jar;
  • &zip;

#screenshot

サンプルコード

//1.6以上で有効
frame.setMinimumSize(new Dimension(320, 150));

解説

上記のサンプルでは、JFrameなどを縮小する際の最小サイズを設定しています。

JDK 1.6 以上の場合、JFrame#setMinimumSizeメソッドを使用することで、最小サイズを指定することができます。

JDK 1.5 で、JFrame#setMinimumSizeメソッドを使う場合は、JFrame.setDefaultLookAndFeelDecorated(true)、かつウインドウのリサイズに応じてレイアウトを再評価するようにしておく必要があるようです。

JFrame.setDefaultLookAndFeelDecorated(true);
Toolkit.getDefaultToolkit().setDynamicLayout(true);

JFrame#setMinimumSizeメソッドを使わず、ComponentListenerでサイズを制限する場合は、この制限を超えて縮小しようとしても、マウスを放した時点で設定した最小サイズまでフレームの大きさは戻されます。

//ComponentListenerを使用
final int mw = 320;
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#validateをオーバーライド
//final Dimension minDim = new Dimension(320, 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#setMaximumSizeはうまくいかないですね(JDK1.6.0_u1)色々調べているのですが、いい方法あるんでしょうか? -- sawshun