1. 程式人生 > >JFrame設定最大尺寸

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

	}

最後窗體註冊事件即可。。。



經過測試,,在使用時會有一點肉眼可見的大小變化,,,