Java - 如何让jframe调整为仅小于设置大小的东西

时间:2013-07-05 16:21:51

标签: java swing jframe

我知道如何在jFrame中设置调整大小,这是

setResizable(false);

但我要做的是防止用户使框架尺寸大于特定的宽度和高度。 (调整到较小的窗口大小很好) 我怎么能这样做?

编辑: 试过这个,不要这样做:

  setSize(700,700);
  setVisible(true);
  setLocation(200,200);
  setMaximumSize(new Dimension(800, 800));

5 个答案:

答案 0 :(得分:3)

您可以使用ComponentListener并覆盖其componentResized()方法。虽然不是完美的解决方案。但这可以让你实现你想要的。 但是GUI会不停地抽搐...我想知道是否还有其他更好的解决方案。

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class MainClass1 {
    public static void main(String[] args) 
    {
        final JFrame frame = new JFrame("My Frame");
        frame.setMaximumSize(new Dimension(350,250));
        frame.addComponentListener( new ComponentAdapter()
        {
            public void componentResized(ComponentEvent evt)
            {
                Dimension size = frame.getSize();
                Dimension max = frame.getMaximumSize();
                if (size.getWidth() > max.getWidth())
                {
                    frame.setSize((int)max.getWidth() ,(int) size.getHeight());
                }
                if (size.getHeight() > max.getHeight())
                {
                    frame.setSize((int)size.getWidth() ,(int) max.getHeight());
                }
            }
        });
        frame.setSize(200,100);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}

答案 1 :(得分:2)

您可以使用

setMaximumSize(new Dimension(100,100));

setMinimumSize(new Dimension(100,100));

由于Swing中已知Bug,因此使用此方法设置MaxSize:

@Override
    public void paint(Graphics g) {
        Dimension d = getSize();
        Dimension m = getMaximumSize();
        boolean resize = d.width > m.width || d.height > m.height;
        d.width = Math.min(m.width, d.width);
        d.height = Math.min(m.height, d.height);

        if (resize) {
            Point p = getLocation();
            setVisible(false);
            setSize(d);
            setLocation(p);
            setVisible(true);
        }
        super.paint(g);
    }

覆盖JFrame的paint-method。

那是你想做的吗?

答案 2 :(得分:2)

创建ComponentListener并在ComponentListener.componentResized()中添加所需约束的逻辑。

答案 3 :(得分:1)

您可以实现组件侦听器以检查帧是否已在指定范围之外调整大小:

addComponentListener(new ComponentAdapter() {

        @Override
        public void componentResized(ComponentEvent e) {
            if (getSize().width > 400 || getSize().height > 400){
                setVisible(false);
                setSize(400, 400);
                setVisible(true);
            }
        }
    });

答案 4 :(得分:1)

获取动作侦听器方法,然后输入

 xMax=700; yMax=700;

 if((xDim>=xMax)&&(xDim>=xMax))
 {
     setSize(xMax,yMax);
 }
 else
 {
     if(xDim>=xMax)
     {
         setSize(xMax,yDim);
     }
     if(yDim>=yMax)
     {
         setSize(xDim,yMax);
     }
 }