首页 > 开发 > Java > 正文

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

2024-07-13 10:15:18
字体:
来源:转载
供稿:网友

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

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

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

swing,窗体,拖拽,swing窗体拉伸

代码如下:

import javax.swing.*; import java.awt.*;  /**  * 窗体拖拽和拉伸  */ public class winReSizeDemo {  private JFrame jf;  public winReSizeDemo(){   jf=new JFrame();   jf.setUndecorated(true);//去标边界和标题栏   jf.setLocationRelativeTo(null);//窗口置中   jf.setSize(400,400);   jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   reSizeEvent dg = new reSizeEvent(jf);   /**添加两个监听器**/   jf.addMouseListener(dg);   jf.addMouseMotionListener(dg);   jf.setVisible(true);  }  public static void main(String [] args){   new winReSizeDemo();  } } 
import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; /**  * 实现窗口各个方向拉伸以及拖动。  */ public class reSizeEvent extends MouseAdapter{  public JFrame jf;  private Point prePos,curPos,jfPos;  private static final double BREADTH = 15.0;//边界拉伸范围  private int dragType;  private static final int DRAG_MOVE = 1;  private static final int DRAG_UP = 2;  private static final int DRAG_UPLEFT = 3;  private static final int DRAG_UPRIGHT = 4;  private static final int DRAG_LEFT = 5;  private static final int DRAG_RIGHT = 6;  private static final int DRAG_BOTTOM = 7;  private static final int DRAG_BOTTOMLEFT = 8;  private static final int DRAG_BOTTOMRIGHT = 9;  public reSizeEvent(JFrame jf){   this.jf = jf;  }  @Override  public void mousePressed(MouseEvent e){   prePos = e.getLocationOnScreen();  }  @Override  public void mouseMoved(MouseEvent e){   areaCheck(e.getPoint());  }  @Override  public void mouseDragged(MouseEvent e){   curPos = e.getLocationOnScreen();   jfPos = jf.getLocation();   dragAction();   prePos = curPos;  }  private void dragAction(){   switch(dragType){    case DRAG_MOVE:     jf.setLocation(jfPos.x+curPos.x-prePos.x,       jfPos.y+curPos.y-prePos.y);     break;    case DRAG_UP://x位置不变,y位置变化,并且Height变化     jf.setLocation(jfPos.x,       jfPos.y+curPos.y-prePos.y);     jf.setSize(jf.getWidth(), jf.getHeight()-(curPos.y-prePos.y));     break;    case DRAG_LEFT://y位置不变,x位置变化,width变化     jf.setLocation(jfPos.x+curPos.x-prePos.x,       jfPos.y);     jf.setSize(jf.getWidth()-(curPos.x-prePos.x), jf.getHeight());     break;    case DRAG_RIGHT://x,y位置不变,width变化     jf.setLocation(jfPos.x,       jfPos.y);     jf.setSize(jf.getWidth()+(curPos.x-prePos.x), jf.getHeight());     break;    case DRAG_BOTTOM://x,y位置不变,Height变化     jf.setLocation(jfPos.x,       jfPos.y);     jf.setSize(jf.getWidth(), jf.getHeight()+(curPos.y-prePos.y));     break;    case 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));     break;    case 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));     break;    case 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));     break;    case 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));     break;    default:     break;   }  }  private boolean areaCheck(Point p){   if(p.getX()<=BREADTH && p.getY()<=BREADTH){    dragType = DRAG_UPLEFT;    jf.setCursor(new Cursor(Cursor.NW_RESIZE_CURSOR));   }else if(p.getX()>BREADTH     && p.getX()<(jf.getWidth()-BREADTH)     && p.getY()<=BREADTH){    dragType = DRAG_UP;    jf.setCursor(new Cursor(Cursor.N_RESIZE_CURSOR));   }else if(p.getX()>=(jf.getWidth()-BREADTH) && p.getY()<=BREADTH){    dragType = DRAG_UPRIGHT;    jf.setCursor(new Cursor(Cursor.NE_RESIZE_CURSOR));   }else if(p.getX()<=BREADTH     && p.getY()<(jf.getHeight()-BREADTH)     && p.getY()>BREADTH){    dragType = DRAG_LEFT;    jf.setCursor(new Cursor(Cursor.W_RESIZE_CURSOR));   }else if(p.getX()>=(jf.getWidth()-BREADTH)     && p.getY()<(jf.getHeight()-BREADTH)     && p.getY()>BREADTH){    dragType = DRAG_RIGHT;    jf.setCursor(new Cursor(Cursor.E_RESIZE_CURSOR));   }else if(p.getX()<=BREADTH     && p.getY()>=(jf.getHeight()-BREADTH)){    dragType = DRAG_BOTTOMLEFT;    jf.setCursor(new Cursor(Cursor.SW_RESIZE_CURSOR));   }else if(p.getX()>BREADTH     && p.getX()<(jf.getWidth()-BREADTH)     && p.getY()>=(jf.getHeight()-BREADTH)){    dragType = DRAG_BOTTOM;    jf.setCursor(new Cursor(Cursor.S_RESIZE_CURSOR));   }else if(p.getX()>=(jf.getWidth()-BREADTH)     && p.getY()>=(jf.getHeight()-BREADTH)){    dragType = DRAG_BOTTOMRIGHT;    jf.setCursor(new Cursor(Cursor.SE_RESIZE_CURSOR));   }else{    dragType = DRAG_MOVE;    jf.setCursor(new Cursor(Cursor.MOVE_CURSOR));    return false;   }   return true;  } } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表