2016-06-25 5 views
0

マウスがボタンの上にある間、キー押下をシミュレートして(javaで)保持しようとしています。キーの押下は、マウスがボタンの上になくなったときにのみ停止する必要があります。私はキーを押しているが、押さえないようにしている。これを行う最善の方法は何ですか?私は終わりのないループを試みましたが、マウスが出ると(明らかに)止まりません。事前にjava:マウスが動いている間、キーの押下とホールドをシミュレートします

buttonSD = new JButton("S+D"); 
    buttonSD.addMouseListener(new MouseAdapter(){ 
     public void mouseEntered(MouseEvent e){ 
      CoordsLabel.setText("Bottom Right"); 
       currentBtn.keyPress(KeyEvent.VK_S); 
       currentBtn2.keyPress(KeyEvent.VK_D); 
     } 

     public void mouseExited(MouseEvent e){ 
      currentBtn.keyRelease(KeyEvent.VK_S); 
      currentBtn2.keyRelease(KeyEvent.VK_S); 
     } 
    }); 
    c.weightx = .25; 
    c.weighty = .25; 
    c.gridx = 2; 
    c.gridy = 2; 
    gridbag.setConstraints(buttonSD, c); 
    controlFrame.add(buttonSD); 

    try{ 
     currentBtn = new Robot(); 
     currentBtn2 = new Robot(); 
    } catch (AWTException e){ 
     e.printStackTrace(); 
    } 

ありがとう:

は、ここに私の多少の作業のコードです!

+0

私はまだ仕事をしていないので、それほど遠くには行きませんでした。これは単なるコードの一部です。 –

+0

なぜこれをやろうとしていますか?より良い解決策があると確信しています。私たちは実際の要件を理解しています。 – camickr

+0

私はビデオゲームをすることができない障害のある友人のためのアクセシビリティプログラムを構築しています。だから、マウスだけでWASDを使うことができます。 –

答えて

1

を、彼はただマウスでWASDを使用することができます以上。

次に、mouseEnteredイベントでSwing Timerを起動し、mouseExitedイベントでTimerを停止します。

タイマーが起動すると、ボタンのdoClick()メソッドが呼び出されます。

詳細および使用例については、How to Use Swing TimerのSwingチュートリアルのセクションをお読みください。

さらに簡単な例として、Update a Label with a Swing Timerをチェックアウトすることもできます。

+0

私はちょうどそれを考えていた。それを試してみましょう。ありがとう! –

0

MouseEvent eが発砲される。キーホールドをシミュレートするには、ホールド状態を表し、各機能に守護句を追加するtoggleと呼ばれる変数追加することにより、一度だけkeyPressを送信:だから

bool toggle = 0; 

public void mouseEntered(MouseEvent e){ 
     if (toggle == 0) { 
      CoordsLabel.setText("Bottom Right"); 
      currentBtn.keyPress(KeyEvent.VK_S); 
      currentBtn2.keyPress(KeyEvent.VK_D); 
      toggle = 1; 
     } 
    } 


public void mouseExited(MouseEvent e){ 
     if (toggle == 1) { 
      CoordsLabel.setText("RELEASED"); 
      currentBtn.keyRelease(KeyEvent.VK_S); 
      currentBtn2.keyRelease(KeyEvent.VK_S); 
     } else { 
      CoordsLabel.setText("Nope"); 
     } 
    } 
関連する問題