最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于swing實現(xiàn)窗體拖拽和拉伸

 更新時間:2017年12月22日 11:59:31   作者:_Thomas  
這篇文章主要為大家詳細(xì)介紹了基于swing實現(xiàn)窗體拖拽和拉伸,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文為大家分享了swing實現(xiàn)窗體拖拽和拉伸的具體代碼,供大家參考,具體內(nèi)容如下

當(dāng)用setUndecorated(true) 后 JFrame去掉標(biāo)題欄后就得自己寫拖拽和拉伸功能了。

下面是效果圖,我的截圖軟件不能夠截取除系統(tǒng)默認(rèn)光標(biāo)外的光標(biāo),所以各個方向光標(biāo)變化在圖中沒有體現(xiàn)

代碼如下:

import javax.swing.*; 
import java.awt.*; 
 
/** 
 * 窗體拖拽和拉伸 
 */ 
public class winReSizeDemo { 
 private JFrame jf; 
 public winReSizeDemo(){ 
  jf=new JFrame(); 
  jf.setUndecorated(true);//去標(biāo)邊界和標(biāo)題欄 
  jf.setLocationRelativeTo(null);//窗口置中 
  jf.setSize(400,400); 
  jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
  reSizeEvent dg = new reSizeEvent(jf); 
  /**添加兩個監(jiān)聽器**/ 
  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; 
/** 
 * 實現(xiàn)窗口各個方向拉伸以及拖動。 
 */ 
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; 
 } 
} 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關(guān)文章

  • Java 設(shè)計模式之適配器模式詳解

    Java 設(shè)計模式之適配器模式詳解

    設(shè)計模式(Design pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)。使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性
    2021-11-11
  • OpenTelemetry?Java?SDK?高級用法解析

    OpenTelemetry?Java?SDK?高級用法解析

    這篇文章主要介紹了OpenTelemetry?Java?SDK?的高級用法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 詳解SpringBoot文件上傳下載和多文件上傳(圖文)

    詳解SpringBoot文件上傳下載和多文件上傳(圖文)

    本篇文章主要介紹了詳解SpringBoot文件上傳下載和多文件上傳(圖文),具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • Springboot集成SSE實現(xiàn)單工通信消息推送流程詳解

    Springboot集成SSE實現(xiàn)單工通信消息推送流程詳解

    SSE簡單的來說就是服務(wù)器主動向前端推送數(shù)據(jù)的一種技術(shù),它是單向的,也就是說前端是不能向服務(wù)器發(fā)送數(shù)據(jù)的。SSE適用于消息推送,監(jiān)控等只需要服務(wù)器推送數(shù)據(jù)的場景中,下面是使用Spring Boot來實現(xiàn)一個簡單的模擬向前端推動進(jìn)度數(shù)據(jù),前端頁面接受后展示進(jìn)度條
    2022-11-11
  • 關(guān)于intellij idea打開就閃退或關(guān)閉詳細(xì)解決辦法

    關(guān)于intellij idea打開就閃退或關(guān)閉詳細(xì)解決辦法

    這篇文章主要介紹了關(guān)于intellij idea打開就閃退或關(guān)閉詳細(xì)解決辦法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 定時任務(wù)注解@Scheduled不生效問題及解決

    定時任務(wù)注解@Scheduled不生效問題及解決

    這篇文章主要介紹了定時任務(wù)注解@Scheduled不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • mybatis-plus處理blob字段的完整示例代碼

    mybatis-plus處理blob字段的完整示例代碼

    在Spring Boot項目中使用MyBatis-Plus處理longblob字段時,我們可以按照本文的步驟進(jìn)行操作,假設(shè) longblob 存儲的是字符串?dāng)?shù)據(jù),本文給大家提供完整示例代碼,感興趣的朋友參考下
    2023-12-12
  • mybatis 實現(xiàn)多條update同時執(zhí)行

    mybatis 實現(xiàn)多條update同時執(zhí)行

    這篇文章主要介紹了mybatis 實現(xiàn)多條update同時執(zhí)行,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 使用Criteria進(jìn)行分組求和、排序、模糊查詢的實例

    使用Criteria進(jìn)行分組求和、排序、模糊查詢的實例

    這篇文章主要介紹了使用Criteria進(jìn)行分組求和、排序、模糊查詢的實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java的字符串中對子字符串的查找方法總結(jié)

    Java的字符串中對子字符串的查找方法總結(jié)

    這篇文章主要介紹了Java的字符串中對子字符串的查找方法總結(jié),是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-11-11

最新評論

深圳市| 三门县| 宾阳县| 高淳县| 满洲里市| 南漳县| 绥棱县| 包头市| 绥棱县| 宜川县| 淅川县| 应城市| 尼木县| 连南| 手游| 商城县| 莎车县| 高密市| 治多县| 普陀区| 当阳市| 新蔡县| 贵州省| 西宁市| 阳新县| 固始县| 获嘉县| 临高县| 卫辉市| 从化市| 松江区| 阳泉市| 临城县| 绥宁县| 伊金霍洛旗| 皋兰县| 乐都县| 铅山县| 右玉县| 青川县| 平山县|