JFrame設定最大尺寸
阿新 • • 發佈:2018-11-09
很多時候會有需求限制視窗大小。。。不是將視窗固定在某個尺寸,,,而是一個範圍。。。
限制最小尺寸可以用 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); } } }
最後窗體註冊事件即可。。。
經過測試,,在使用時會有一點肉眼可見的大小變化,,,