2

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

setResizable(false);

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

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

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

5 回答 5

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);
    }

}
于 2013-07-05T16:40:56.523 回答
2

您可以使用

setMaximumSize(new Dimension(100,100));

或者

setMinimumSize(new Dimension(100,100));

由于 Swing 中的一个已知错误,请使用它来设置 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 的绘制方法。

那是你想做的吗?

于 2013-07-05T16:25:07.047 回答
2

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

于 2013-07-05T16:40:29.377 回答
1

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

addComponentListener(new ComponentAdapter() {

        @Override
        public void componentResized(ComponentEvent e) {
            if (getSize().width > 400 || getSize().height > 400){
                setVisible(false);
                setSize(400, 400);
                setVisible(true);
            }
        }
    });
于 2013-07-05T16:24:26.637 回答
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);
     }
 }
于 2013-07-05T16:34:34.377 回答