一个项目,要求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