1

Oracleのダイアログボックスチュートリアルのバリエーションを試しています。提供したオプションの数が多すぎると感じたので、OptionDialogからInputDialogに変換し、オブジェクト配列を使用しました。ただし、データ型が変更されたため、(replyMessage内の)switchステートメントが機能しなくなりました。ユーザーの選択に対応するオブジェクト配列のインデックスを取得するにはどうすればよいですか?

Object answer;        
    int ansInt;//the user'a answer stored as an int

    Object[] options = {"Yes, please",
            "No, thanks",
            "No eggs, no ham!",
            "Something else",
            "Nothing really"
        };//end options
    answer = JOptionPane.showInputDialog(null, "Would you like some green eggs to go with that ham?",
        "A Silly Question",
        JOptionPane.QUESTION_MESSAGE,
        null,
        options,
        options[2]);

    ansInt = ;//supposed to be the index of user's seleection   

    replyMessage(ansInt);
4

1 に答える 1

2

showInputDialog配列内の文字列の1つである、ユーザーが入力した文字列を返しますoptions。どのインデックスが選択されたかを知る最短の方法は、options配列をループして同等性を見つけることです。

for(i = 0; i < options.length; i++) {
  if(options[i].equals(answer) {
    ansInt = i;
    break;
  }
}

もう1つの可能性は、キー/値のマップを作成することです。

Map<String, Integer> optionsMap = new HashMap<String, Integer>();
options = optionsMap.keySet().toArray();
... Call the dialog ...
ansInt = optionsMap.get(answer);

オプションの数が少ない場合は、最初のオプションが適しています。多くのオプションがある場合は、2番目のソリューションのパフォーマンスが大幅に向上します。さらにパフォーマンスを向上させるために、optionsMapandoptions配列をキャッシュできます。

于 2012-07-15T06:32:26.130 に答える