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

Java實(shí)現(xiàn)鼠標(biāo)拖拽移動(dòng)界面組件

 更新時(shí)間:2014年09月14日 10:47:33   投稿:hebedich  
在Java中,F(xiàn)rame或者JFrame自身已經(jīng)實(shí)現(xiàn)了鼠標(biāo)拖拽標(biāo)題欄移動(dòng)窗口的功能。但是Jframe的樣式實(shí)在無(wú)法令人滿(mǎn)意,那你又該怎么實(shí)現(xiàn)鼠標(biāo)拖拽移動(dòng)窗口的目的呢?今天我們來(lái)探討下

  默認(rèn)的,F(xiàn)rame或者JFrame自身已經(jīng)實(shí)現(xiàn)了鼠標(biāo)拖拽標(biāo)題欄移動(dòng)窗口的功能。

  只是,當(dāng)你不滿(mǎn)意java的JFrame樣式,隱藏了標(biāo)題欄和邊框,又或者干脆直接使用JWindow,那你又該怎么實(shí)現(xiàn)鼠標(biāo)拖拽移動(dòng)窗口的目的呢?最開(kāi)始,我簡(jiǎn)單的在mouseDragged方法里frame.setLocation(e.getX(), e.getY()),結(jié)果,frame拖拽的時(shí)候不停地閃爍,位置在屏幕上不斷跳動(dòng)。后來(lái)網(wǎng)上查資料,找到了答案。

 這里給一個(gè)簡(jiǎn)單的示例,一看就明白:

 package com.jebysun.test.globalhotkey;
 
 import java.awt.Color;
 import java.awt.Cursor;
 import java.awt.Point;
 import java.awt.event.MouseEvent;
 
 import javax.swing.JLabel;
 import javax.swing.JWindow;
 import javax.swing.event.MouseInputListener;
 
 /**
 * 自定義程序窗口,鼠標(biāo)可拖拽移動(dòng)其位置。
 * @author Jeby Sun
 *
 */
 public class MyFrame extends JWindow {
 
   private static final long serialVersionUID = 1L;
   
   JLabel titleLbl;
   
   public MyFrame() {
     //設(shè)置背景顏色不能直接調(diào)用其setBackground方法,而要設(shè)置其ContentPane的背景顏色。
     this.getContentPane().setBackground(new Color(0x99FF66));
     this.setBounds(100,100,600,400);
     this.setLayout(null);
     
     titleLbl = new JLabel(" 自定義窗口標(biāo)題欄");
     titleLbl.setOpaque(true);
     titleLbl.setBackground(new Color(0x66CC00));
     titleLbl.setBounds(0, 0, 600, 30);
     this.add(titleLbl);
     //鼠標(biāo)事件處理類(lèi)
     MouseEventListener mouseListener = new MouseEventListener(this);
     titleLbl.addMouseListener(mouseListener);
     titleLbl.addMouseMotionListener(mouseListener);
     
     this.setVisible(true);
   }
 
   /**
   * 鼠標(biāo)事件處理
   * @author Jeby Sun
   *
   */
   class MouseEventListener implements MouseInputListener {
     
     Point origin;
     //鼠標(biāo)拖拽想要移動(dòng)的目標(biāo)組件
     MyFrame frame;
     
     public MouseEventListener(MyFrame frame) {
       this.frame = frame;
       origin = new Point();
     }
     
     @Override
     public void mouseClicked(MouseEvent e) {}
 
     /**
     * 記錄鼠標(biāo)按下時(shí)的點(diǎn)
     */
     @Override
     public void mousePressed(MouseEvent e) {
       origin.x = e.getX(); 
       origin.y = e.getY();
     }
 
     @Override
     public void mouseReleased(MouseEvent e) {}
 
     /**
     * 鼠標(biāo)移進(jìn)標(biāo)題欄時(shí),設(shè)置鼠標(biāo)圖標(biāo)為移動(dòng)圖標(biāo)
     */
     @Override
     public void mouseEntered(MouseEvent e) {
       this.frame.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
     }
     
     /**
     * 鼠標(biāo)移出標(biāo)題欄時(shí),設(shè)置鼠標(biāo)圖標(biāo)為默認(rèn)指針
     */
     @Override
     public void mouseExited(MouseEvent e) {
       this.frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
     }
 
     /**
     * 鼠標(biāo)在標(biāo)題欄拖拽時(shí),設(shè)置窗口的坐標(biāo)位置
     * 窗口新的坐標(biāo)位置 = 移動(dòng)前坐標(biāo)位置+(鼠標(biāo)指針當(dāng)前坐標(biāo)-鼠標(biāo)按下時(shí)指針的位置)
     */
     @Override
     public void mouseDragged(MouseEvent e) {
       Point p = this.frame.getLocation();
       this.frame.setLocation(
         p.x + (e.getX() - origin.x), 
         p.y + (e.getY() - origin.y)); 
     }
 
     @Override
     public void mouseMoved(MouseEvent e) {}
     
   }
   
   public static void main(String[] args) {
     new MyFrame();
   }
 
 }

相關(guān)文章

  • 全面解析Spring Security 內(nèi)置 Filter

    全面解析Spring Security 內(nèi)置 Filter

    這篇文章主要介紹了Spring Security 內(nèi)置 Filter的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 詳解java中的static關(guān)鍵字

    詳解java中的static關(guān)鍵字

    這篇文章主要介紹了java中的static關(guān)鍵字的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • JAVA多種方法實(shí)現(xiàn)字符串反轉(zhuǎn)

    JAVA多種方法實(shí)現(xiàn)字符串反轉(zhuǎn)

    大家好,本篇文章主要講的是JAVA多種方法實(shí)現(xiàn)字符串反轉(zhuǎn),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽
    2022-01-01
  • Java如何做帶復(fù)選框的菜單實(shí)例代碼

    Java如何做帶復(fù)選框的菜單實(shí)例代碼

    大家好,本篇文章主要講的是Java如何做帶復(fù)選框的菜單實(shí)例代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽
    2021-12-12
  • 基于mybatis-plus QueryWrapper 排序的坑

    基于mybatis-plus QueryWrapper 排序的坑

    這篇文章主要介紹了mybatis-plus QueryWrapper 排序的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 關(guān)于springboot加載yml配置文件的no字段自動(dòng)轉(zhuǎn)義問(wèn)題

    關(guān)于springboot加載yml配置文件的no字段自動(dòng)轉(zhuǎn)義問(wèn)題

    這篇文章主要介紹了關(guān)于springboot加載yml配置文件的no字段自動(dòng)轉(zhuǎn)義問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • IO中flush()函數(shù)的使用代碼示例

    IO中flush()函數(shù)的使用代碼示例

    這篇文章主要介紹了IO中flush()函數(shù)的使用代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • idea如何解決commit代碼時(shí)一直code Analyze加載的問(wèn)題

    idea如何解決commit代碼時(shí)一直code Analyze加載的問(wèn)題

    文章介紹了解決Git提交代碼時(shí)出現(xiàn)codeAnalyze加載卡頓問(wèn)題的方法,即關(guān)閉IDEA中的相關(guān)設(shè)置選項(xiàng),作者分享個(gè)人經(jīng)驗(yàn),希望對(duì)大家有所幫助,并鼓勵(lì)支持腳本之家
    2025-01-01
  • SSM框架搭建圖文教程(推薦)

    SSM框架搭建圖文教程(推薦)

    下面小編就為大家?guī)?lái)一篇SSM框架搭建圖文教程(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • 詳解Spring的@Value作用與使用場(chǎng)景

    詳解Spring的@Value作用與使用場(chǎng)景

    這篇文章主要介紹了詳解Spring的@Value作用與使用場(chǎng)景,Spring為大家提供許多開(kāi)箱即用的功能,@Value就是一個(gè)極其常用的功能,它能將配置信息注入到bean中去,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

轮台县| 台湾省| 盐池县| 砀山县| 蚌埠市| 沈阳市| 利川市| 尤溪县| 象山县| 沽源县| 区。| 嘉兴市| 望都县| 玛曲县| 宁南县| 怀安县| 思茅市| 鹿泉市| 新化县| 遵义县| 孝昌县| 杨浦区| 阿拉善左旗| 博兴县| 天水市| 常山县| 宜昌市| 射阳县| 山丹县| 团风县| 建阳市| 上林县| 奈曼旗| 大化| 五家渠市| 九江县| 永寿县| 突泉县| 湖口县| 德格县| 达州市|