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

首頁(yè) > 編程 > Java > 正文

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

2019-11-26 15:25:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

  只是,當(dāng)你不滿意java的JFrame樣式,隱藏了標(biāo)題欄和邊框,又或者干脆直接使用JWindow,那你又該怎么實(shí)現(xiàn)鼠標(biāo)拖拽移動(dòng)窗口的目的呢?最開始,我簡(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)事件處理類     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();   }  }

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 白玉县| 寿光市| 德保县| 大余县| 将乐县| 夹江县| 潞西市| 东明县| 白河县| 弋阳县| 富顺县| 壶关县| 鄄城县| 滕州市| 恩平市| 寿宁县| 四子王旗| 景德镇市| 东方市| 新密市| 呼玛县| 靖远县| 曲水县| 扬州市| 蒲城县| 揭西县| 望江县| 天津市| 收藏| 张北县| 林州市| 邵阳县| 马关县| 石渠县| 蓝山县| 万安县| 巴青县| 乌拉特前旗| 桐柏县| 天祝| 常熟市|