本文为大家分享了摇摆实现窗体拖拽和拉伸的具体代码,供大家参考,具体内容如下
当用setUndecorated(真正的)后JFrame去掉标题栏后就得自己写拖拽和拉伸功能了。
下面是效果图,我的截图软件不能够截取除系统默认光标外的光标,所以各个方向光标变化在图中没有体现
进口javax.swing。*; 进口java.awt。*;/* * *窗体拖拽和拉伸 */公开课winReSizeDemo { 私人JFrame摩根富林明; 公共winReSizeDemo () { 摩根富林明=new JFrame (); jf.setUndecorated(真正);//去标边界和标题栏 jf.setLocationRelativeTo (null);//窗口置中 jf.setSize (400400); jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); reSizeEvent dg=new reSizeEvent(摩根富林明);/* *添加两个监听器* */jf.addMouseListener (dg); jf.addMouseMotionListener (dg); jf.setVisible(真正的); } 公共静态void main (String [] args) { 新winReSizeDemo (); } }
进口javax.swing。*; 进口java.awt。*; 进口java.awt.event.MouseAdapter; 进口java.awt.event.MouseEvent;/* * *实现窗口各个方向拉伸以及拖动。 */公开课reSizeEvent延伸MouseAdapter { 公共JFrame摩根富林明; 私人点prePos curPos jfPos; 私有静态最终双宽=15.0;//边界拉伸范围 私人int dragType; 私有静态最终int DRAG_MOVE=1; 私有静态最终int DRAG_UP=2; 私有静态最终int DRAG_UPLEFT=3; 私有静态最终int DRAG_UPRIGHT=4; 私有静态最终int DRAG_LEFT=5; 私有静态最终int DRAG_RIGHT=6; 私有静态最终int DRAG_BOTTOM=7; 私有静态最终int DRAG_BOTTOMLEFT=8; 私有静态最终int DRAG_BOTTOMRIGHT=9; 公共reSizeEvent (JFrame摩根富林明){ 这一点。摩根富林明=摩根富林明; } @Override 公共空间mousePressed (MouseEvent e) { prePos=e.getLocationOnScreen (); } @Override 公共空间mouseMoved (MouseEvent e) { areaCheck (e.getPoint ()); } @Override 公共空间mouseDragged (MouseEvent e) { curPos=e.getLocationOnScreen (); jfPos=jf.getLocation (); dragAction (); prePos=curPos; } 私人空间dragAction () { 开关(dragType) { 案例DRAG_MOVE: jf.setLocation (jfPos.x + curPos.x-prePos.x, jfPos.y + curPos.y-prePos.y); 打破; 案例DRAG_UP://x位置不变,y位置变化,并且高度变化 jf.setLocation (jfPos.x jfPos.y + curPos.y-prePos.y); jf.getHeight jf.setSize (jf.getWidth () () - (curPos.y-prePos.y)); 打破; 案例DRAG_LEFT://y位置不变,x位置变化,宽度变化 jf.setLocation (jfPos.x + curPos.x-prePos.x, jfPos.y); jf.setSize (jf.getWidth ()——(curPos.x-prePos.x) jf.getHeight ()); 打破; 案例DRAG_RIGHT://x, y位置不变,宽度变化 jf.setLocation (jfPos.x jfPos.y); jf.setSize (jf.getWidth () + (curPos.x-prePos.x) jf.getHeight ()); 打破; 案例DRAG_BOTTOM://x, y位置不变,高度变化 jf.setLocation (jfPos.x jfPos.y); jf.getHeight jf.setSize (jf.getWidth () () + (curPos.y-prePos.y)); 打破; 案例DRAG_UPLEFT://x, y位置均变化,h, w均变化 jf.setLocation (jfPos.x + curPos.x-prePos.x, jfPos.y + curPos.y-prePos.y); jf.setSize (jf.getWidth ()——(curPos.x-prePos.x) jf.getHeight ()——(curPos.y-prePos.y)); 打破; 案例DRAG_BOTTOMRIGHT://x, y位置均不变,h, w变化 jf.setLocation (jfPos.x jfPos.y); jf.setSize (jf.getWidth () + (curPos.x-prePos.x) jf.getHeight () + (curPos.y-prePos.y)); 打破; 案例DRAG_UPRIGHT://x位置不变,y, w h变化 jf.setLocation (jfPos.x jfPos.y + curPos.y-prePos.y); jf.setSize (jf.getWidth () + (curPos.x-prePos.x) jf.getHeight ()——(curPos.y-prePos.y)); 打破; 案例DRAG_BOTTOMLEFT://y不变,xwh变化 jf.setLocation (jfPos.x + curPos.x-prePos.x, jfPos.y); jf.setSize (jf.getWidth ()——(curPos.x-prePos.x) jf.getHeight () + (curPos.y-prePos.y)); 打破; 默认值: 打破; } } 私人布尔areaCheck(点p) { 如果(p.getX () & lt;=宽,,p.getY () & lt;=广度){ dragType=DRAG_UPLEFT; 摩根富林明。setCursor(新游标(Cursor.NW_RESIZE_CURSOR)); }else if (p.getX()在广度 ,,p.getX () & lt; (jf.getWidth()宽度) ,,p.getY () & lt;=广度){ dragType=DRAG_UP; 摩根富林明。setCursor(新游标(Cursor.N_RESIZE_CURSOR)); }else if (p.getX()在=(jf.getWidth()宽度),,p.getY () & lt;=广度){ dragType=DRAG_UPRIGHT; 摩根富林明。setCursor(新游标(Cursor.NE_RESIZE_CURSOR)); }else if (p.getX () & lt;=广度 ,,p.getY () & lt; (jf.getHeight()宽度) ,,p.getY()在广度){ dragType=DRAG_LEFT; 摩根富林明。setCursor(新游标(Cursor.W_RESIZE_CURSOR)); }else if (p.getX()在=(jf.getWidth()宽度) ,,p.getY () & lt; (jf.getHeight()宽度) ,,p.getY()在广度){ dragType=DRAG_RIGHT; 摩根富林明。setCursor(新游标(Cursor.E_RESIZE_CURSOR)); }else if (p.getX () & lt;=广度 ,,祝辞p.getY ()=(jf.getHeight()广度)){ dragType=DRAG_BOTTOMLEFT; 摩根富林明。setCursor(新游标(Cursor.SW_RESIZE_CURSOR)); }else if (p.getX()在广度 ,,p.getX () & lt; (jf.getWidth()宽度) ,,祝辞p.getY ()=(jf.getHeight()广度)){ dragType=DRAG_BOTTOM; 摩根富林明。setCursor(新游标(Cursor.S_RESIZE_CURSOR)); }else if (p.getX()在=(jf.getWidth()宽度) ,,祝辞p.getY ()=(jf.getHeight()广度)){ dragType=DRAG_BOTTOMRIGHT; 摩根富林明。setCursor(新游标(Cursor.SE_RESIZE_CURSOR)); 其他}{ dragType=DRAG_MOVE; 摩根富林明。setCursor(新游标(Cursor.MOVE_CURSOR)); 返回错误; } 返回true; } }基于swing实现窗体拖拽和拉伸