2011-07-26 10 views
2

ActionListenerに接続されたJButtonがありますが、ボタンにショートカットキーを追加してユーザーフレンドリーにしたいと考えていました。ユーザーがボタンをクリックすると、プログラムが何らかの機能 "f"を実行するか、またはユーザーがキーボードの "Enter"を押して同じ機能を実行することができます。だからここアクションリスナーと同じアクションを実行するキーバインディングの設定

private JButton button; 

public static void main(String[] args){ 
    Action buttonListener = new AbstractAction() { 
     public void actionPerformed(ActionEvent e) { 
       //Perform function f  
     } 
    }; 

button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ENTER"), 
         "test"); 
button.getActionMap().put("test", 
         buttonListener); 

button.addActionListener(new OtherListener()); 
} 

private class OtherListener implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 
     //Perform function f 
    } 
} 

アクションと同じことを行うためにActionListenerを追加する必要が少し退屈に思えるように私のコードの要旨は見えるものです。たぶん私はそれを見ていないだろうが、アクションを排除し、ちょうどactionListenerを使用することができるようにコードをカットする方法はありますか?私は、getActionMap()。put()メソッドのbuttonListenerパラメータを切り替えることを考えていましたが、メソッドはAction型のみを受け取ります。

答えて

5

ActionActionListenerを拡張するので、Actionを定義して、ActionListenerが必要な場所で使用する必要があります。

public static void main(String[] args){ 
    Action buttonListener = new Action() { 
     public void actionPerformed(ActionEvent e) { 
       //Perform function f  
     } 
    }; 
    button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW) 
     .put(KeyStroke.getKeyStroke("ENTER"), "test"); 
    button.getActionMap().put("test", buttonListener); 
    button.addActionListener(buttonListener); 
} 
+0

完璧、ありがとう – oipsl

4

JRootPaneには、あなたが望むことを行う方法setDefaultButton(...)があります。トップレベルのコンテナからルートペインを取得する必要があります。次に、このメソッドをJButtonへの参照を渡して呼び出すと、GUIでenterを押したときにアクションが実行されます。これは、「入力」が特別なキーであるため、そのことについて考えると意味があります。その1つの動作はGUIの責任であり、1つのボタンではありません。

関連する問題