一個項目,要求JFrame能夠最大化,標準,最小化。但不能夠修改窗口大小。java
但若是使用setResizable(false)就會致使,最大化按鈕的消失。因此只能另想辦法ide
查閱資料後發現AWTEventListener能夠屏蔽一些事件。調整窗口大小又都是經過鼠標完成的因此想試一試,是否是能夠這樣來達到須要的效果。this
private class DisableMouseDraggedListener implements AWTEventListener{ private Object source; private DisableMouseDraggedListener(Object source) { this.source = source; } @Override public void eventDispatched(AWTEvent e) { MouseEvent event = (MouseEvent) e; if(event.getID() == MouseEvent.MOUSE_DRAGGED && event.getSource()==source){ event.consume(); } } }
自定義一個DisableMouseDraggedListener類嵌入咱們的JFrame類中,攔截鼠標拖拽事件並判斷source是否是JFrame對象。consume()的意思就是讓事件失效。
而後在JFrame構造中加入spa
getToolkit().addAWTEventListener(new DisableMouseDraggedListener(this),AWTEvent.MOUSE_MOTION_EVENT_MASK);
就能夠達到不讓其經過鼠標的方式來改變窗口大小的目的。
但鼠標放在JFrame邊緣時仍是會出現修改窗口大小的鼠標箭頭,只是不能拖拽了。code