JFrame设置最大尺寸

很多时候会有需求限制窗口大小。。。不是将窗口固定在某个尺寸,,,而是一个范围。。。

限制最小尺寸可以用 JFrame的 setMinimumSize() 方法。。。但是设置最大尺寸去调用 setMaximumSize() 却不起作用。。。原因未知

因此我的思路是   监听窗口的大小改变事件,,,当达到最大尺寸的时候用 Robot 类操纵鼠标

首先是监听大小改变事件

this.addComponentListener()

因为操作会涉及教多的变量,不适合用匿名类。。

因此新建一个SizeLisenter  类,,该类继承 ComponentAdapter,,,并重写 public void componentResized(ComponentEvent e); 方法


首先要确定成员变量

private JFrame jFrame;//操作的窗口,将这个换成其他窗体类也行
	private int width;//最大宽度
	private int height;//最大高度

并用一个唯一的构造方法赋值

public SizeLisenter(JFrame jFrame, int width, int height) {
		super();
		this.jFrame = jFrame;
		this.width = width;
		this.height = height;
	}

最后是响应方法

/**
	 * 响应窗口大小改变事件
	 */
	public void componentResized(ComponentEvent e) {
		Robot r = null;//这是用来控制鼠标
		try {
			r = new Robot();
		} catch (AWTException e1) {
			e1.printStackTrace();
		}
		if (jFrame.getWidth() > width) {//不能相等,否则一旦达到最大尺寸,就无法再调整大小
			jFrame.setSize(width, jFrame.getHeight());
			if (r!=null) {
				r.mouseRelease(InputEvent.BUTTON1_MASK);//松开鼠标左键
			}
		}
		if (jFrame.getHeight() > height) {
			jFrame.setSize(jFrame.getWidth(), height);
			if (r!=null) {
				r.mouseRelease(InputEvent.BUTTON1_MASK);
			}
		}

	}

最后窗体注册事件即可。。。



经过测试,,在使用时会有一点肉眼可见的大小变化,,,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值