• ベストアンサー

Java初心者です。

Java初心者です。 デスクトップ等のPC画面内をクリックしたときに、クリックしたよというフラグを取得したいのですが、さっぱりわかりません。 ネットで検索しても、Javaで用意したコンポーネント上をクリックしたというフラグは拾えるのは多数紹介されているのですが・・・(探し方が悪いのかも)。 また、クリックしたところの座標も取得できるようにするつもりです。(←これは、getPointerInfo()で解決できると思っています) お手数ですが、どうぞご教授お願い致します。

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

  • ベストアンサー
回答No.1

FOCUS_LOST時のリスナ仕込んでおくのはどうでしょうか。 これで要件を満たせるかどうか分かりませんが。 というのは、これだと一度フォーカスを失うとそれきりなので。

truque
質問者

お礼

ありがとうございます! コンポーネントを用意することになってしまいましたが、できました! 確かに、一度フォーカスを失うとそれきりですね。 ちょっと工夫して、フォーカスを再度失えるようにしました。 動作スピードは遅いですけど、自分が満足できるレベルのものにはなりました。 以下のようにしました。 import java.awt.AWTException; import java.awt.Container; import java.awt.MouseInfo; import java.awt.Point; import java.awt.PointerInfo; import java.awt.Robot; import java.awt.event.FocusListener; import java.awt.event.FocusEvent; import java.awt.event.InputEvent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class FocusListenerTest02 { public static void main( String[] args ) { JFrame jFrame = new JFrame( "フォーカスロストによるマウスポジションゲット" ); jFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); jFrame.setBounds( 0, 0, 100, 100); JPanel jPanel = new JPanel(); JTextField jTextField02 = new JTextField( "" ); jTextField02.addFocusListener( new Listner02( "" ) ); jPanel.add( jTextField02 ); Container container = jFrame.getContentPane(); container.add( jPanel ); jFrame.setVisible( true ); } } class Listner02 implements FocusListener { private String name = ""; public Listner02( String name ) { this.name = name; } public void focusGained( FocusEvent e ) { System.out.println( "focusGained() : " + name ); } public void focusLost(FocusEvent e) { System.out.println( "focusLost() : " + name ); PointerInfo a = MouseInfo.getPointerInfo(); Point b = a.getLocation(); int x = (int) b.getX(); System.out.println(x + ":" + y); try { Thread.sleep(1000); } catch (InterruptedException ie) { ie.printStackTrace(); } try { Robot robot02 = new Robot(); robot02.mouseMove(50, 50); robot02.mousePress(InputEvent.BUTTON1_MASK);// 左クリック robot02.mouseRelease(InputEvent.BUTTON1_MASK);// クリック離す robot02.mousePress(InputEvent.BUTTON1_MASK);// 左クリック robot02.mouseRelease(InputEvent.BUTTON1_MASK);// クリック離す robot02.mouseMove(x, y); } catch (AWTException e1) { e1.printStackTrace(); } } }

関連するQ&A