2012-02-16 1 views
2

JButtonを押してトリガーする方法を聞くには?例えばJavaボタンとキーボードのボタンを聴く

私は、パネル上のGUIとして、 "A" のJButtonを持っています。私は "aButton"に実装されたbuttonListenerを持っています。これは画面を他のものに変更します。マウスのクリックとキーボードの押下の両方でこのボタンをトリガーしたい。

buttonListenerを実装しているときにキーボードの「a」を押してこの「A」JButtonをトリガーするにはどうすればよいですか?

現在のコードでキーイベントがトリガーされません。

ButtonListener listener; 
KeyboardListener keyboardListener; 
private JButton aButton; 

public MyButtonPanel() { 
    listener = new ButtonListener(); 

    aButton = new JButton ("A"); 
    aButton.setFont (BUTTON_TEXT); 
    aButton.setPreferredSize (new Dimension (60,30)); 
    aButton.addActionListener (listener); 
    aButton.addKeyListener (keyboardListener); 

    setLayout (new BorderLayout()); 
    add (aButton, BorderLayout.CENTER); 

} 

private class KeyboardListener implements KeyListener 
{ 
    public void keyPressed(KeyEvent arg0) { 
     char c = arg0.getKeyChar(); 
     System.out.println("Pressed " + c); 
    } 

    public void keyReleased(KeyEvent arg0) { 
     char c = arg0.getKeyChar(); 
     System.out.println("Released " + c); 
    } 

    public void keyTyped(KeyEvent arg0) { 
     char c = arg0.getKeyChar(); 
     System.out.println("Typed " + c); 
    } 

} 

private class ButtonListener implements ActionListener { 
    public void actionPerformed (ActionEvent event) { 
    Object source = event.getSource(); 

    if (source == aButton) { 
     System.out.println("This is a"); 
    } 
    } 
} 

}

+1

..私は見 – Sean

+0

ストロークだから私はちょうど使用することができ、ここでhttp://docs.oracle.com/javase/tutorial/uiswing/components/button.html キーボードにするJButtonをリンクする例があり、ニーモニック年代についてお読みくださいこのようなものb3.setMnemonic(KeyEvent.VK_E); b3.setActionCommand( "enable"); – nowhere

答えて

5

アクションを作成します。次に、ActionListenerを使用してボタンにアクションを追加します。また、KeyStrokeにアクションをバインドしてキーボードイベントを処理します。

Swing tutorialをお読みください。あなたが始めるためにキーバインディング

の使用方法アクション

  • の使用方法

    1. :上のセクションがあります。

      ボタンにニーモニックを割り当てて、ボタンを呼び出すこともできます。 JButton APIを読んでください。

  • +0

    私の悪い、ちょうどあなたの最後の行を見ました。ちょうど私は今、私の答えを削除することはできません。今日は私の答えを削除することはできません。しかし、情報のために+1。 –

    1

    あなたが望むものを達成するためのもう1つの方法があります。コード部分にコメント行を追加するだけです。入力のプレスに今

    yourFrameObject.getRootPane().setDefaultButton(aButton); 
    

    :あなたはこれを行うことで、この場合はデフォルトのJButtonあまりにもあなたがそのボタンを作ることができます懸念していることを、一つだけのボタンを使用している場合

    aButton = new JButton ("A"); 
    aButton.setFont (BUTTON_TEXT); 
    // Doing this will also allow you to use your Keyboard for this JButton. You have to 
    // press ALT+A in this case to make it work. 
    //aButton.setMnemonic(KeyEvent.VK_A); 
    

    キーは、actionPerformed()メソッドで説明されているように作業を行います。

    注:デフォルトのボタン機能の正確な実装は、ルックアンドフィールによって異なります。たとえば、Windowsのルックアンドフィールでは、デフォルトのボタンがフォーカスのあるボタンに変わり、Enterキーを押すとフォーカスされたボタンがクリックされます。ボタンにフォーカスがないときは、もともとデフォルトボタンとして指定したボタンが再びデフォルトボタンになります。

    +0

    情報ありがとうございました。この基本的な質問には申し訳ありません:Altキーを押すことなくニーモニックを有効にする方法はありますか? – nowhere

    +0

    @nowhere:KeyBindingのようなものがその答えです。それとも、それが私の答えの下の部分で説明されているように、あなたが懸念しているボタンの1つだけであれば、そのボタンをデフォルトにしてください。ボタンをデフォルトにすると、ENTERキーを押すだけで機能します。私の答えで言われているのは、あなたのためのトリックです。ニーモニックはALTで動作することを意図しています。私は、 –

    +0

    と思います。さて、KeyBindingを見て、コードでそれを試してみましょう。私は1つ以上のボタンを実装する必要があります。これはほんの始まりです。 :)しかし、デフォルトボタンの説明に感謝します。 – nowhere

    1

    Enterキーを特定のコンポーネントにバインドするには、キーバインディングを順番に使用します。 あなたのケースでは、あなたがpressedアクションへの参照ですbtnActionして特定のコンポーネントをリンクするキーワードである

    aButton.getInputMap().put(KeyStroke.getKeyStroke("ENTER"),"pressed"); 
    aButton.getActionMap().put("pressed",btnAction); 
    

    を使用することができます。実行するアクションを指定できるAbstractAction()を使用してアクションを作成できます。 あなたは同じコンポーネントをマウスに反応したい場合はAction以来

    aButton.addActionListener(btnAction); 
    

    ActionListenerインターフェースから拡張された方法を使用することができます]をクリックし、この問題が発生することはありません。

    関連する問題