Java实现鼠标拖拽移动界面组件
程序员文章站
2024-03-01 12:25:04
默认的,frame或者jframe自身已经实现了鼠标拖拽标题栏移动窗口的功能。
只是,当你不满意java的jframe样式,隐藏了标题栏和边框,又或者干脆直接使用...
默认的,frame或者jframe自身已经实现了鼠标拖拽标题栏移动窗口的功能。
只是,当你不满意java的jframe样式,隐藏了标题栏和边框,又或者干脆直接使用jwindow,那你又该怎么实现鼠标拖拽移动窗口的目的呢?最开始,我简单的在mousedragged方法里frame.setlocation(e.getx(), e.gety()),结果,frame拖拽的时候不停地闪烁,位置在屏幕上不断跳动。后来网上查资料,找到了答案。
这里给一个简单的示例,一看就明白:
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; /** * 自定义程序窗口,鼠标可拖拽移动其位置。 * @author jeby sun * */ public class myframe extends jwindow { private static final long serialversionuid = 1l; jlabel titlelbl; public myframe() { //设置背景颜色不能直接调用其setbackground方法,而要设置其contentpane的背景颜色。 this.getcontentpane().setbackground(new color(0x99ff66)); this.setbounds(100,100,600,400); this.setlayout(null); titlelbl = new jlabel(" 自定义窗口标题栏"); titlelbl.setopaque(true); titlelbl.setbackground(new color(0x66cc00)); titlelbl.setbounds(0, 0, 600, 30); this.add(titlelbl); //鼠标事件处理类 mouseeventlistener mouselistener = new mouseeventlistener(this); titlelbl.addmouselistener(mouselistener); titlelbl.addmousemotionlistener(mouselistener); this.setvisible(true); } /** * 鼠标事件处理 * @author jeby sun * */ class mouseeventlistener implements mouseinputlistener { point origin; //鼠标拖拽想要移动的目标组件 myframe frame; public mouseeventlistener(myframe frame) { this.frame = frame; origin = new point(); } @override public void mouseclicked(mouseevent e) {} /** * 记录鼠标按下时的点 */ @override public void mousepressed(mouseevent e) { origin.x = e.getx(); origin.y = e.gety(); } @override public void mousereleased(mouseevent e) {} /** * 鼠标移进标题栏时,设置鼠标图标为移动图标 */ @override public void mouseentered(mouseevent e) { this.frame.setcursor(cursor.getpredefinedcursor(cursor.move_cursor)); } /** * 鼠标移出标题栏时,设置鼠标图标为默认指针 */ @override public void mouseexited(mouseevent e) { this.frame.setcursor(cursor.getpredefinedcursor(cursor.default_cursor)); } /** * 鼠标在标题栏拖拽时,设置窗口的坐标位置 * 窗口新的坐标位置 = 移动前坐标位置+(鼠标指针当前坐标-鼠标按下时指针的位置) */ @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(); } }
下一篇: Python的装饰器使用详解