天天看点

java 窗体鼠标拖动图片_Swing实现鼠标拖动移动窗体

不同操作系统通常会有不同的标题栏和关闭按钮风格,为了保证我们的程序在各操作系统显示风格保持一致,有时候我们需要隐藏窗体的标题栏和边框,这可以使用Frame的成员函数setUndecorated实现。没有标题栏的窗体默认不支持鼠标拖动移动窗体,这就需要我们针对窗体添加对应的监听器。通常包含一个鼠标监听器(MouseListener)和一个鼠标移动监听器(MouseMotionListener),下面是一个实例:

package Test;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class TestFrameDemo {

// 全局的位置变量,用于表示鼠标在窗口上的位置

static Point origin = new Point();

static JFrame myFrame = new JFrame();

public static void main(String[] args) {

myFrame.setUndecorated(true);

myFrame.setSize(600, 400);

myFrame.setVisible(true);

myFrame.addMouseListener(new MouseAdapter() {

// 按下(mousePressed

// 不是点击,而是鼠标被按下没有抬起)

public void mousePressed(MouseEvent e) {

// 当鼠标按下的时候获得窗口当前的位置

origin.x = e.getX();

origin.y = e.getY();

}

});

myFrame.addMouseMotionListener(new MouseMotionAdapter() {

// 拖动(mouseDragged

// 指的不是鼠标在窗口中移动,而是用鼠标拖动)

public void mouseDragged(MouseEvent e) {

// 当鼠标拖动时获取窗口当前位置

Point p = myFrame.getLocation();

// 设置窗口的位置

// 窗口当前的位置 + 鼠标当前在窗口的位置 - 鼠标按下的时候在窗口的位置

myFrame.setLocation(p.x + e.getX() - origin.x, p.y + e.getY()

- origin.y);

}

});

}

}

这个例子创建了一个窗体,首先使用setUndecorated函数隐藏窗体的边框和标题栏,并且将窗体的宽度设置为600px,窗体的高度设置为400px,添加了两个鼠标监听器,一个监控鼠标按下操作,另一个监控鼠标移动操作。

【发表评论0条 】