Swing/MouseInfo のバックアップの現在との差分(No.1)
TITLE:JFrameの外にあるMouseの位置を取得する
JFrameの外にあるMouseの位置を取得する
編集者:Terai Atsuhiro~
作成日:2007-10-29
更新日:2021-12-02 (木) 11:12:43
概要
Screen
上にあるMouse
の絶対位置を取得して、パネル内のラケットを移動します。
Screenshot
Advertisement
概要
JFrameの外にあるMouseの絶対位置を取得して、パネル内のラケットを移動します。#screenshot
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
public static final Dimension panelDim = new Dimension(320, 240);
private final Racket racket = new Racket(panelDim);
#spanadd
#spanend
public MainPanel() {
super(new BorderLayout());
setPreferredSize(panelDim);
new javax.swing.Timer(10, this).start();
super(new BorderLayout());
setPreferredSize(panelDim);
new Timer(10, this).start();
}
#spandel
@Override
#spanend
#spandel
public void paintComponent(Graphics g) {
#spanend
super.paintComponent(g);
racket.draw(g);
#spanadd
#spanend
#spanadd
@Override protected void paintComponent(Graphics g) {
#spanend
super.paintComponent(g);
racket.draw(g);
}
#spandel
//@Override
#spanend
#spandel
public void actionPerformed(ActionEvent e) {
#spanend
PointerInfo pi = MouseInfo.getPointerInfo();
Point pt = pi.getLocation();
SwingUtilities.convertPointFromScreen(pt, this);
racket.move(pt.x);
repaint();
#spanadd
#spanend
#spanadd
@Override public void actionPerformed(ActionEvent e) {
#spanend
PointerInfo pi = MouseInfo.getPointerInfo();
Point pt = pi.getLocation();
SwingUtilities.convertPointFromScreen(pt, this);
racket.move(pt.x);
repaint();
}
- &jnlp;
- &jar;
- &zip;
解説
上記のサンプルでは、以下の手順でラケットを動かしています。- 10ミリ秒ごとにMouseInfoからPointerInfoを取得
- PointerInfoから画面上でのポインタ座標を取得
- SwingUtilities.convertPointFromScreenメソッドで、パネル相対のポインタ座標に変換
- ラケットに変換した座標を与えて、repaint
解説
上記のサンプルでは、マウスカーソルがパネル外に移動した場合でもラケットを動かせるように、以下のような方法を使用しています。参考リンク
-
Timer
を使用して10
ミリ秒ごとにMouseInfo
からPointerInfo
を取得 -
PointerInfo
から画面上でのポインタ座標を取得 -
SwingUtilities.convertPointFromScreen(...)
メソッドでこれをパネル相対の座標に変換 - ラケットに変換した座標を与えて
JPanel#repaint()
メソッドで再描画