天天看點

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條 】