本文为大家分享了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_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; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍基于Vue实现拖拽功能,包括了基于Vue实现拖拽功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Vue实现拖拽功能的具体代码,供大家参考,具体内容如下 效果图: HTML代码: JS代码: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍基于Vue实现拖拽效果,包括了基于Vue实现拖拽效果的使用技巧和注意事项,需要的朋友参考一下 效果图 demo1.gif 分清clientY pageY screenY layerY offsetY的区别 在我们想要做出拖拽这个效果的时候,我们需要分清这几个属性的区别,这几个属性都是计算鼠标点击的偏移值,我们需要对其进行了解才可以继续实现我们的拖拽效果 clientY 指的是距离
本文向大家介绍js实现小窗口拖拽效果,包括了js实现小窗口拖拽效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js实现窗口拖拽的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍基于jquery插件实现拖拽删除图片功能,包括了基于jquery插件实现拖拽删除图片功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了jquery插件实现拖拽删除图片功能的具体代码,供大家参考,具体内容如下 实现以下效果 完全拖出这个层,图片会消失,否则图片会回到原来的位置 以上就是本文的全部内容,希望对大家学习jquery程序设计有所帮助。
本文向大家介绍基于vue实现一个禅道主页拖拽效果,包括了基于vue实现一个禅道主页拖拽效果的使用技巧和注意事项,需要的朋友参考一下 效果图如下所示: 源码地址 bb两句 最近在做一个基于vue的后台管理项目。平时项目进度统计就在上禅道上进行。so~ 然后领导就感觉这个拖拽效果还行,能不能加到咱们项目里面。 既然领导发话,那就开干。。 所有技术:vue + vuedraggable 拖动的实现基于
本文向大家介绍js实现百度登录窗口拖拽效果,包括了js实现百度登录窗口拖拽效果的使用技巧和注意事项,需要的朋友参考一下 前言 在我们使用百度相关的功能网页的时候,我们要去登录账号。但是小伙伴们有没有关注过百度的登录窗口的拖拽效果呢?下面分享仿百度登录拖拽效果的源码 代码 总结 上面的代码就是仿百度登录窗口效果的实现,小伙伴们把代码复制到编译器上面看效果。希望对学习前端开发的小伙们有帮助。 以上就是