2

F1から12または0から9またはAからZ(すべてのボタン)でキーボードを押したとき。キーボード入力をキャプチャしているのがわかりません。これを修正するにはどうすればよいですか?

public class Boot extends JWindow implements KeyListener
{
  public Boot() 
  {
    .....
    this.addKeyListener(this);
    ....
  }

  public void keyTyped(KeyEvent ke) 
  {
    System.out.println( ke.getKeyChar());
  }

  public void keyPressed(KeyEvent ke) 
  {
    System.out.println( ke.getKeyChar());

    /* KEY EVENTS */
    // KeyEvent.KEY_TYPED
    // KeyEvent.KEY_PRESSED
    // int id = id.getId();

  }

  public void keyReleased(KeyEvent ke) 
  {
    System.out.println( ke.getKeyChar());
  }

}
4

2 に答える 2

4

KeyEvents は、フォーカス可能なコンポーネントにのみ渡されます。

JWindow() コンストラクターの API を読んでください。それは述べています:

所有者が指定されていないウィンドウを作成します。このウィンドウはフォーカス可能ではありません。

JWindow(Frame) コンストラクターの API を読み取ります。それは述べています:

指定されたオーナー フレームを持つウィンドウを作成します。所有者が null の場合、共有所有者が使用され、このウィンドウはフォーカス可能になりません。また、このウィンドウは、所有者が画面に表示されていない限りフォーカスできません。

したがって、基本的に、JWindow を使用する場合は、可視 JFrame も作成する必要があります。

JFrame frame = new JFrame();
frame.setVisible( true );
JWindow window = new JWindow(frame);

フォーラムで見たハックは、次を使用することです。

JWindow window = new JWindow(new JFrame("is Showing")
{
   public boolean isShowing()
   {
     return true;
   }
});

または、より良いアプローチは、装飾されていない JFrame を使用することであり、これについて心配する必要はありません。

于 2011-11-09T15:35:21.130 に答える
0

【KeyEventのJava API】

getKeyChar メソッドは、常に有効な Unicode 文字または CHAR_UNDEFINED を返します。文字入力は、KEY_TYPED イベントによって報告されます。KEY_PRESSED および KEY_RELEASED イベントは、必ずしも文字入力に関連付けられているわけではありません。したがって、getKeyChar メソッドの結果は、KEY_TYPED イベントに対してのみ意味があることが保証されています。

キーが押されたイベントとキーが離されたイベントの場合、getKeyCode メソッドはイベントの keyCode を返します。キー タイプのイベントの場合、getKeyCode メソッドは常に VK_UNDEFINED を返します。

解放されたキーで getKeyCode を使用します。 KeyEvent.F1、F2、... はファンクション キーとして使用できます。

于 2011-11-09T15:01:42.270 に答える