0

サブクラス ColorAction で AbstractAction クラスを拡張しようとしています。このクラスは、ユーザーの入力を文字列形式で受け取り、文字列キーcolorKeyHashMapおよびColor オブジェクト内の Color 値と照合することによって、ActionPerformed メソッドを処理します。指定されたキーを持つ Color オブジェクトが見つからない場合、例外がスローされます。

私の人生では、これを行う方法がわかりません。多分私のゲームはオフですか?色の名前である文字列入力を取得、指定された文字列が色オブジェクトの 1 つと一致することを確認する必要がありますか? ユーザーが色を入力するのと同じ ActionEvent を作成する必要がありますか? たくさんのアイデアが頭の中を駆け巡っていますが、確実な勝者はありません。

public class ColorAction extends AbstractAction{
    Map<String, Color> colorMap;
    private String input;

    public ColorAction(String in) {
        input = in;
        colorMap = new HashMap<>(); //how can i enter a value that is a full range of colors?
    }

    @Override
    public void actionPerformed(ActionEvent e){
        if(colorMap.containsKey(input){
            //...
        }    
    }
}
4

1 に答える 1

1

私があなたの目標を正しく理解していれば、colorMapあなたによって事前定義された独立したマップであり、したがって静的である必要があります。

これは、静的マップを塗りつぶす可能な方法です。

private static final Map<String, Color> colorMap = createColorMap();

private static Map<String, Color> createColorMap() {
    Map<String, Color> colorMap = new HashMap<>();

    //Fill colorMap

    return colorMap;
}

e.getActionCommand()また、通常はメソッドを呼び出すことでユーザー入力を取得できますactionPerformedColorActionユーザー入力をのコンストラクターに渡す理由がわかりません。

@Override
public void actionPerformed(ActionEvent e){
    //Assumes the map doesn't have any keys containing upper case letters.
    //By calling toLowerCase, if the user inputs "Red", it would still match
    //the key "red".
    String input = e.getActionCommand().toLowerCase();

    if(colorMap.containsKey(input){
        //...
    }    
}

そうは言っても、おそらくコンストラクターはまったく必要ありません。

于 2013-05-22T20:46:15.217 に答える