2010-11-27 10 views
1

私はアプレットを作成しており、ボタンを作る方法とキーイベントが同じコードをカバーする方法を理解したいと思っています。この質問では、このボタンをfireButtonと呼びます。アクションイベントのコードは、当然のことながら、このようになります。ActionEventとKeyEventを同じ動作にするにはどうすればよいですか?

public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == fireButton) { 
     //all the code that pressing button executes 
    } 
} 

今、私は、そのアクションは、イベントのハンドルと同じコードを実行するためのキー「を入力してください」を押したいが、私はすべて書き換えしたくありませんkeyPressedメソッドで再度コードします。

具体的には、私は戦艦のプログラムを書いています。「Fire」ボタンは、2つのtextFieldからの入力を受け取り、例外を処理し、グリッド内の特定の四角形で発生するメソッドにパラメータとして入力を渡します。理想的には、Enterキーを押すことは、私が火事ボタンを押した場合と同じように機能します。特定のメソッドをactionPerformedメソッドに呼び出す方法はありますか?もしそうでなければ、問題に対するエレガントな解決策は何でしょうか?

答えて

1
  1. Swing tutorialを読むアクションにキーを入力し

をバインドするためのJButton

  • 使用キーバインディングにアクションの追加アクション
  • を作成します。

    アクションにあなただけのためにEnter Key and Buttonをチェックアウトし、Enterキーで「火」ボタンを呼び出すことについて話している場合はキーバインディングに
  • の使用方法

  • の使用方法
    1. :上のセクションがあります。いくつかのアプローチ。

  • +0

    最後のリンクはまさに​​私が必要としたものでした。ありがとう! – meerkat

    0

    借用MVCこれらの種類のリクエストを処理するコントローラクラスをお勧めします。次に、各イベントハンドラのコントローラに委任するだけです。あなたは、関連するコードを投稿する場合

    public class BattleShipController { 
    
        public void handleFireAction() { 
        // ... 
        } 
    } 
    
    //-- in your UI class(es) 
    private BattleShipController _controller = new BattleShipController(); 
    
    //-- in event calls: 
    _controller.handleFireAction(); 
    

    私はさらに提案を行うことができます。

    とても好きです。

    1

    は、私はあなたがパラメータとして(もしあれば)イベントからすべての関連データを受け取り、別の方法ですべてのコードを入れてお勧め:あなたはイベントからすべてのデータを必要としない場合は

    public void actionPerformed(ActionEvent e) { 
        if (e.getSource() == fireButton) { 
         Object relevantData0 = new Object(); // e.getSomething(); 
         Object relevantData1 = new Object(); // e.getSomethingElse(); 
         handleFireAction(relevantData1, relevantData2); 
        } 
    } 
    
    public void actionPerformed(KeyEvent e) { 
        if (e.getSource() == fireButton) { 
         Object relevantData0 = new Object(); // e.getSomething(); 
         Object relevantData1 = new Object(); // e.getSomethingElse(); 
         handleFireAction(relevantData1, relevantData2); 
        } 
    } 
    
    private void handleFireAction(Object relevantData0, Object relevantData1) { // Object relevantDat2, and so on 
        //all the code that pressing button executes 
    } 
    

    そのさらに簡単に;) この方法で、両方のイベントに対してコードを一度書くだけです。それは一般的なオブジェクト指向です。
    これが役に立ちます。

    関連する問題