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

作者:_Thomas 时间:2023-11-12 22:32:40 

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

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

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

基于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;
}
}

来源:http://blog.csdn.net/a694543965/article/details/78027743

标签:swing,拖拽,拉伸
0
投稿

猜你喜欢

  • 用C语言实现一个扫雷小游戏

    2022-02-24 01:35:56
  • Android获取手机系统版本等信息的方法

    2023-02-05 20:36:08
  • java 集合----Map、Collection

    2022-11-09 03:39:01
  • Android实现购物车功能

    2022-08-14 19:06:55
  • java实现双色球抽奖算法

    2023-11-28 23:51:51
  • java 获取当前时间的三种方法

    2022-10-11 21:54:04
  • Android第三方控件PhotoView使用方法详解

    2021-12-07 20:35:48
  • C语言数据结构之二叉树详解

    2021-08-18 20:56:41
  • springboot扩展MVC的方法

    2023-12-15 14:19:05
  • C#获取文件创建时间的方法

    2022-04-25 22:56:55
  • Java详细讲解包的作用以及修饰符的介绍

    2021-09-14 05:27:26
  • Unity5.6大规模地形资源创建方法

    2022-07-12 20:59:55
  • 在Android Studio中Parcelable插件的简单使用教程

    2022-05-08 17:12:26
  • Java语法关于泛型与类型擦除的分析

    2023-12-22 06:15:22
  • Java最全文件操作实例汇总

    2023-11-14 13:00:17
  • java:无法访问org.springframework.boot.SpringApplication的解决方法

    2022-07-14 05:24:29
  • idea2017建立jsp工程及tomcat配置教程

    2023-06-04 20:24:40
  • 浅谈MyBatis通用Mapper实现原理

    2022-11-18 18:45:16
  • Spring AOP实现复杂的日志记录操作(自定义注解)

    2023-01-24 15:21:50
  • IDEA设置背景为自定义照片的操作方法

    2022-12-28 09:13:08
  • asp之家 软件编程 m.aspxhome.com