2011-12-18 9 views
1

私はちょうどJPanelの上addKeyListener()を使用して(KeyEvent ke)をkeyPressedコールバックメソッドの一つで、私は図面のものキーボードポーリングの用途は何ですか?

`public void keyPressed(KeyEvent ke) 
    { 
     keyName=KeyEvent.getKeyText(ke.getKeyCode()); 
     /*calling other classes ,calculating values 
     and drawing on the jpanel (moving an image ,etc) 
     */ 
     ke.consume(); 
    }` 

を行い、キーボード入力を受け付ける.FORのJava 1.6を使用して、2Dグラフィックアプリケーションを作るしかし、そこにいますまず初期化し、このような何かを行く私はいくつかのブログで見つかった別のアプローチ、

1)があるboolean[] keys=new boolean[256];

2)各キーイベントを受信したため、その後、ちょうどこのブール配列に値を格納します。

`public void keyPressed(KeyEvent ke) 
{ 
      //storing the keyevent:true since its due to key being pressed 
    keyMap[ke.getKeyCode()]=true; 
    ke.consume(); 
}` 


`public void keyReleased(KeyEvent ke) 
{ 
      //storing the keyevent:false since its due to key being released 
    keyMap[ke.getKeyCode()]=false; 
    ke.consume(); 
}` 

最後に[]ブール値をループし、キーの状態をチェックする方法..

 `for(int i=0;i<keyMap.length;i++) 
     { 
      if(keyMap[i]==true) 
      { 

          /* do some graphic tasks...*/ 
      } 
     }` 

いただきました二つのパターンの違いはありますか?

+0

2番目の方法では、古き良き時代にポーリングが行われたように見えるコードが生成されますが、ポーリングのようには見えません。それはまだポーリングではなく配列を変更するコールバックです...そして、あなたはJavaでそれについて選択することはできません(少なくとも100%Javaコードではありません)。ネイティブにしたい場合は、キーボードがUSBポートに接続されている間、実際にポーリングすることができます(PS/2ならIRQ /コールバックは私が覚えている限りです)。 – NoozNooz42

答えて

4

第2のアプローチでは、複数のキーを同時に押すことができます。通常は、ダブルキーを押しながら斜めに移動できます。

+0

しかし、パフォーマンスの点では最高ですか? – PraveenMax

+0

キー処理がプログラムのボトルネックになることはありません。 – I82Much

+0

I82に加えてコメント:約10^-9ミリ秒のスピードが必要な場合を除き、キーが押されるとすぐに最初のスピードが速くなります。 – LeleDumbo

関連する問題