Java完成鼠標拖拽挪動界面組件。本站提示廣大學習愛好者:(Java完成鼠標拖拽挪動界面組件)文章只能為提供參考,不一定能成為您想要的結果。以下是Java完成鼠標拖拽挪動界面組件正文
默許的,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();
}
}