Swing实现鼠标拖动移动窗体

2014-11-29 19:16:04|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词: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条 】
网友评论(共?条评论)..
Swing实现鼠标拖动移动窗体