服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 基于swing实现窗体拖拽和拉伸

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

2021-03-10 14:21_Thomas Java教程

这篇文章主要为大家详细介绍了基于swing实现窗体拖拽和拉伸,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

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

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

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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();
 }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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

延伸 · 阅读

精彩推荐