基于swing实现窗体拖拽和拉伸

  

本文为大家分享了摇摆实现窗体拖拽和拉伸的具体代码,供大家参考,具体内容如下

  

当用setUndecorated(真正的)后JFrame去掉标题栏后就得自己写拖拽和拉伸功能了。
  

  

下面是效果图,我的截图软件不能够截取除系统默认光标外的光标,所以各个方向光标变化在图中没有体现

  

基于swing实现窗体拖拽和拉伸”> </p>
  <p>代码如下:<br/>
  </p>
  
  <pre类=   进口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实现窗体拖拽和拉伸