3

あなたがただできるなら、KeyBindingsのポイントは何ですか:

// Imports

public void Test {
    JButton button1;
    JButton button2;
    JButton button3;
    ...

    Test() {
        button1 = new JButton();
        button1.addKeyListener(this);

        button2 = new JButton();
        button2.addKeyListener(this);

        button3 = new JButton();
        button3.addKeyListener(this);

        ...
    }

    public void keyPressed(KeyEvent e) {
    }

    public void keyReleased(KeyEvent e) {
    }

    public void keyTyped(KeyEvent e) {

        Object src = e.getSource();

        if (src == button1) {
            ...
        }

        else if (src == button2) {
            ...
        }

        else if (src == button3) {
            ...
        }
        ...
    }
}

ボタンが10個あるとします。次に、KeyBindings を使用する場合は、ボタンごとに個別のキーバインドを作成する必要があります。私が示した例はより効率的ではありませんか? なぜだめですか?

4

1 に答える 1

2

あなたが純粋にCPUサイクルを数えているのなら、そうです、それは(おそらく)より効率的です(そして慎重に検討した後、私はそれさえ確信していません)。しかし、それにはいくつかの長所があります。

  1. それはあなたのコードをかなり醜くします(あなたが何千ものテストを持っていると想像してください)
  2. 再利用性が低い
  3. オブジェクト指向ではない:オブジェクトKeyStrokeをオブジェクトアクションにバインドする方がOOです(アクションの詳細については、こちらを参照してください) 。
  4. コードが読みにくく、巨大になる可能性があるため、エラーが発生しやすくなります
  5. コードは緊密に結合されています(KeyListenerを別のクラスに移動することはほとんどできません)
  6. テストでは、どのボタンがイベントを発生させたかを確認しますが、どのキーが入力されたかはまだわかりません。それを見つけるには、さらにテストを追加する必要があります。

したがって、非常に局所的な問題の場合は、アプローチで十分ですが、より大きなビューの場合は、それを維持できません。

ここの3番目の段落で、この問題に関するいくつかの同様の追加のコメントを見つけることができます。

最後に、KeyListenerをJButtonに配置するのは少し奇妙です。通常、ActionListenerを登録します。

于 2012-05-15T22:26:43.200 に答える