ActionEventとKeyEvent Fireを同じアクションにするにはどうすればよいですか?
-
28-09-2019 - |
質問
私はアプレットを書いていますが、ボタンとキーイベントの作成方法を見つけたいと思っています。同じコードをカバーしています。この質問については、このボタンを呼び出します fireButton
. 。アクションイベントのコードはもちろん次のようになります。
public void actionPerformed(ActionEvent e) {
if (e.getSource() == fireButton) {
//all the code that pressing button executes
}
}
今、私は「Enter」キーを押して、アクションイベントが処理するのと同じコードを実行したいのですが、すべてのコードを再び書き直したくありません keyPressed
方法。
具体的には、戦艦プログラムを作成しています。「火災」ボタンは、2つのテキストフィールドから入力を受け、例外を処理し、入力をグリッドの特定の正方形で発射する方法にパラメーターとして渡します。理想的には、Enterキーを押すと、火災ボタンを押した場合と同じように機能します。特定のメソッドを呼び出す方法はありますか actionPerformed
方法?そうでない場合、問題に対するエレガントな解決策は何でしょうか?
解決
- アクションを作成します
- Jbuttonにアクションを追加します
- キーバインディングを使用して、アクションに入力キーをバインドします
読む スイングチュートリアル. 。にセクションがあります:
- アクションの使用方法
- キーバインディングの使用方法
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();
関連するコードを投稿する場合、さらに提案できます。