Frame または JFrame 自体にはデフォルトでタイトルバーをマウスでドラッグすることでウィンドウを移動する機能が実装されています。
しかし、Java の JFrame スタイルに満足できない場合、タイトル バーと境界線を非表示にするか、単純に JWindow を直接使用する場合、マウスのドラッグによってウィンドウを移動するという目的をどのように達成できるでしょうか。最初は単純に、mouseDraggedメソッドでframe.setLocation(e.getX(), e.getY())を使用したため、ドラッグするとフレームがちらつき続け、画面上の位置が飛び続けていました。その後、インターネットで情報を調べたところ、答えが見つかりました。
一目で理解できる簡単な例を次に示します。
パッケージ com.jebysun.test.globalhotkey; インポート java.awt.Cursor; インポート javax.swing.JLabel; .JWindow; import javax.swing.event.MouseInputListener; /** * プログラム ウィンドウをカスタマイズし、マウスをドラッグして位置を移動できます。 * @author Jeby Sun * */ public class MyFrame extends JWindow { private staticfinallongserialVersionUID = 1L JLabel titleLbl; //背景色を設定するには、setBackground メソッドを直接呼び出すことはできませんが、背景を設定します。 ContentPane の色。 this.getContentPane().setBackground(new Color(0x99FF66)); this.setBounds(100,100,600,400); titleLbl("カスタマイズされたウィンドウ タイトル バー"); .setBackground(新しい色(0x66CC00)); titleLbl.setBounds(0, 0, 600, 30); this.add(titleLbl); //マウスイベント処理クラス MouseEventListener(this); titleLbl.addMouseListener(mouseListener); .setVisible(true); } /** *マウスイベント処理* @author Jeby Sun * */ class MouseEventListenerimplements MouseInputListener { //マウスで移動したいコンポーネントをドラッグ MyFrame Frame) { this.frame =frame; @Override public void MouseClicked(MouseEvent e) {} /** * マウスが押された時点を記録します*/ @Override public void MousePressed(MouseEvent e) { Origin.x = e.getX();origin.y = e.getY(); } @Override public voidmouseEvent 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.getPredependentCursor(Cursor.DEFAULT_CURSOR)); /** ※タイトルバー上でマウスをドラッグ ドラッグする際は、ウィンドウの座標位置を設定します ※新しいウィンドウの座標位置=移動前の座標位置+(現在のマウスポインタの座標-マウス移動時のポインタの位置)が押されています) */ @Override public void MouseDragged(MouseEvent e) { Point p = this.frame.getLocation(); this.frame.setLocation( px + (e.getX() - Origin.x), py + (e.getY() - Origin. y)); } @Override public void MouseMoved(MouseEvent e) {} } public static void main(String[] args) { new MyFrame() } }