很多时候会有需求限制窗口大小。。。不是将窗口固定在某个尺寸,,,而是一个范围。。。
限制最小尺寸可以用 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);
}
}
}
最后窗体注册事件即可。。。
经过测试,,在使用时会有一点肉眼可见的大小变化,,,