-1

キーバインディングを作成するために、ここに次のコードがあります。

KeyStroke k = KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0);
getInputMap(WHEN_IN_FOCUSED_WINDOW).put(k, k.toString());
getActionMap().put(k.toString(), new AbstractAction()
{ 
    public void actionPerformed(ActionEvent e)
    {
        //put action here
    }
});  

問題は、プログラム全体でこれらが8つあることです。これらはそれぞれ、抽象クラスを保持するための個別のクラスファイルを作成します。可能であれば、これをどのように書き直して、作成されるクラスの数を制限しますか。(私はこれを検索しましたが、reduce抽象クラスは有用なものを何も思いつきません)

4

2 に答える 2

5

ここで @EdC によって提案された拡張に加えて、このに示すようにAction、構成を使用できますJButton。また、この に示すように、別のに転送するActionこともできます。ActionEventActionKeyPadPanel

于 2012-09-15T01:50:02.410 に答える
3

したがって、重複がどこにあるかのおそらくいくつかの例で質問を更新すると、何が役立ちますか。たとえば、複製されたのは、匿名の内部クラスのボイラー プレートだけです。もしそうなら、あなたはJava 8まで立ち往生しています.それとも、重複しているメソッド本体のかなりの部分があるということですか?

この場合、共通コードを使用して抽象スーパークラスを追加できます。これにより、実際にはクラスの数が増加しますが、これは一般的に問題ではありません。例えば

private static abstract class MyBaseAction extends AbstractAction {
    public void actionPerformed(ActionEvent e) {
        // Do Common Stuff
        // ....

        doSpecificStuff(e);
    }

    protected abstract void doSpecificStuff(ActionEvent e);
}

次に、匿名の内部クラスの抽象アクションではなく、これをサブクラス化します。

于 2012-09-15T01:14:00.430 に答える