国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泾源县| 图木舒克市| 于都县| 莱阳市| 益阳市| 松江区| 永仁县| 扎囊县| 长治市| 东宁县| 襄垣县| 红河县| 会宁县| 洛川县| 和政县| 宁安市| 宁远县| 车险| 开封市| 瑞金市| 龙口市| 安仁县| 常德市| 普兰店市| 翁牛特旗| 托里县| 新沂市| 汪清县| 治县。| 西充县| 双柏县| 林甸县| 塔河县| 巴青县| 澳门| 西安市| 泊头市| 商水县| 宁城县| 吴川市| 柳河县|