• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Javaマウスイベント 応答速度の改善したい。。)

Javaマウスイベント 応答速度の改善したい。

このQ&Aのポイント
  • Javaマウスイベントにおいて、連続してクリックした際に応答できない場合がある。
  • マウスイベントの応答速度を改善したいが、解決策がわからない。
  • 初心者のため、改善方法について教えてほしい。

質問者が選んだベストアンサー

  • ベストアンサー
  • sech1152
  • ベストアンサー率72% (45/62)
回答No.1

記述されているプログラムを実行してみました。 確かに何回かに一回、クリックが反応しないように見えます。 で、いろいろ試した結果、マウスイベントが発生していないというよりも、クリックの判定条件が厳しくてクリックとして扱われていない、ということのようです。 クリックイベントは、マウスのボタンを押したときにmousePressedが呼び出され、ボタンを離したときにmouseReleasedが呼び出されます。 mouseClickedは、mousePressedとmouseReleasedの間に、マウスを動かさなければ呼び出されます。 ボタンを押している間にマウスを動かすと、MouseMotionListenerのmouseDraggedが呼び出され、mouseClickedは呼び出されません。 下のように変更したプログラムで実行してみたところ、クリックが反応しないように見えるときは、mouseDraggedが呼び出されていましたので、気が付かないくらいにマウスを動かしていたようです。 ただし、これはこちらの環境ではこうだったということであって、質問者さんの環境でも同じかどうかまでは分かりません。もしかしたら本当にPCが重くなっていて、クリックが検知できないのかもしれません。 解決策としては、 1、これが仕様だ、として諦める。(別の代替処理を考える) 2、mouseClickedは無しにして、mousePressedとmouseReleasedでそれぞれマウスの位置を検出し、一定の移動距離以内であればクリックとして扱うように、自分で処理を作る。 になると思います。 import java.awt.Color; import java.awt.Graphics; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JFrame; import javax.swing.JPanel; public class jjj extends JFrame { public jjj() { add(new DrawPanel()); } public static void main(String[] A00) { Toolkit.getDefaultToolkit().setDynamicLayout(true); JFrame L00 = new jjj(); L00.setTitle("マウスの座標を表示"); L00.setDefaultCloseOperation(EXIT_ON_CLOSE); L00.setBackground(Color.white); L00.setSize(1920, 1200); L00.setVisible(true); } } class DrawPanel extends JPanel implements MouseListener, MouseMotionListener { int I00 = 10; int I01 = 10; int w = 10; int h = 10; int a = 100; int b = 100; int press = 0; int release = 0; int click = 0; int drag = 0; public DrawPanel() { setBackground(Color.white); addMouseListener(this); addMouseMotionListener(this); } public void paintComponent(Graphics g) { super.paintComponent(g); String L00 = String.format("(%d, %d) %d %d %d %s", I00, I01, press, release, click, drag > 0 ? "Dragged! " + drag : ""); g.drawString(L00, I00, I01); g.drawLine(0, 0, I00, I01); g.drawRect(I00 - a / 2, I01 - b / 2, a, b); } public void mouseMoved(MouseEvent A00) { } public void mouseDragged(MouseEvent A00) { drag++; repaint(); } public void mousePressed(MouseEvent A00) { press++; } public void mouseReleased(MouseEvent A00) { release++; } public void mouseClicked(MouseEvent A00) { I00 = A00.getX(); I01 = A00.getY(); click++; drag = 0; repaint(); } public void mouseEntered(MouseEvent arg0) { } public void mouseExited(MouseEvent arg0) { } }

すると、全ての回答が全文表示されます。

関連するQ&A