ActionEventとKeyEvent Fireを同じアクションにするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4289715

質問

私はアプレットを書いていますが、ボタンとキーイベントの作成方法を見つけたいと思っています。同じコードをカバーしています。この質問については、このボタンを呼び出します fireButton. 。アクションイベントのコードはもちろん次のようになります。

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

今、私は「Enter」キーを押して、アクションイベントが処理するのと同じコードを実行したいのですが、すべてのコードを再び書き直したくありません keyPressed 方法。

具体的には、戦艦プログラムを作成しています。「火災」ボタンは、2つのテキストフィールドから入力を受け、例外を処理し、入力をグリッドの特定の正方形で発射する方法にパラメーターとして渡します。理想的には、Enterキーを押すと、火災ボタンを押した場合と同じように機能します。特定のメソッドを呼び出す方法はありますか actionPerformed 方法?そうでない場合、問題に対するエレガントな解決策は何でしょうか?

役に立ちましたか?

解決

  1. アクションを作成します
  2. Jbuttonにアクションを追加します
  3. キーバインディングを使用して、アクションに入力キーをバインドします

読む スイングチュートリアル. 。にセクションがあります:

  1. アクションの使用方法
  2. キーバインディングの使用方法

Enterキーで「火災」ボタンを呼び出すことについて話している場合は、チェックアウトしてください キーとボタンを入力します いくつかのアプローチのために。

他のヒント

すべてのコードを、イベントからすべての関連データをパラメーターとして受信する別の方法に配置することをお勧めします。

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
}  

イベントからデータが必要ない場合はさらに簡単です;)この方法で、両方のイベントにコードを1回記述します。それは一般的なooのアプローチです。
お役に立てれば。

からの借入 MVC これらの種類のリクエストを処理するコントローラークラスをお勧めします。その場合、あなたがしなければならないのは、各イベントハンドラーのコントローラーに委任することだけです。

そのようです:

public class BattleShipController {

   public void handleFireAction() {
   // ...
   }
}

//-- in your UI class(es)
private BattleShipController _controller = new BattleShipController();

//-- in event calls:
_controller.handleFireAction();

関連するコードを投稿する場合、さらに提案できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top