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

网友投稿 566 2023-03-04


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

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

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

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

代码如下:

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_BOTTOMLWjZlClprEFT = 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.getWiWjZlClprdth(), 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;

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:主机管理API系统(主机管理控制台)
下一篇:接口课程设计(接口设计案例)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~