0

そこで、職場に必要な最初の GUI アプリを作成しています。いくつかの値、ラジオ ボタンからの値、ユーザー入力からの値を計算したいと考えています。

また、最終結果にいくつかの他のオプションを追加したいと考えています (費用がかかる携帯電話会社向けの追加オプションがあります)。

多数のEO(extraoptions)について、ユーザーに複数の選択肢を選択させたい。

私はコンボボックスを試しましたが、1つのオプションしか選択できないため、リストについて考えました(おそらくjList?)

すべての EO には一般的な名前が必要ですが、最終結果に計算される値 (キー) を保持することは非常に重要です。

質問は次のとおりです。それを行うための最良の方法は何だと思いますか。(私はかなり初心者なので、それほど難しいことではありません)

事前に感謝します。私に厳しくしないでください。それは私の最初の質問です! アプリ: http://tinypic.com/r/wugsnm/5

更新: それで、このアプリを完成させるためにさらにいくつかのステップを踏むことができました。これまでのところ、リストから選択した行を取得して、合計結果に含めることができました。
しかし: a)リストから何かを選択せず​​に結果を計算することはできなくなりました。(テキスト フィールドのみ)
b) 結果は更新されません。別の行を選択しても、結果は同じまま
です コードは次のようになります。

public class NewJFrame extends JFrame {
Double radioNumb1 = null, radioNumb2 = null, subsidyNumb , result = null, radioNumb3 = null, radioNumb4 = null, periodNumb, ans ;

String[] eo_names = {"Value 1", "Value 2", "Value 3", "Value 4", "Value 5"}; //the names of EO (for now)
double[] eo_values = {10, 100, 1000, 10000, 100000}; // the values of EO (for now)    
NumberFormat nfRegular = NumberFormat.getNumberInstance(Locale.US); // to shorten the decimals of the result

public void greaterCondition (Double radioNumb){
        result = ((subsidyNumb + ans)/radioNumb) * periodNumb;
     if (periodNumb > radioNumb){
            JOptionPane.showMessageDialog(null, "Perioada contractuala dorita este mai mare decat cea initiala", "Error", JOptionPane.ERROR_MESSAGE);

        }}
private void initRadioButton() { //setting the second radioButton as default
    radioButton1.setSelected(false);
    radioButton2.setSelected(true);
    radioButton3.setSelected(false);
    radioButton4.setSelected(false);
}

    public NewJFrame() {
        initComponents();
        init();

    }

private void init(){
    setTitle("CED calculator for KA");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setVisible(true);
}
   private void equalButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            
        radioNumb1 = Double.parseDouble(radioButton1.getText());
        radioNumb2 = Double.parseDouble(radioButton2.getText());
        radioNumb3 = Double.parseDouble(radioButton3.getText());
        radioNumb4 = Double.parseDouble(radioButton4.getText());
        subsidyNumb = Double.parseDouble(subsidyField.getText());
        periodNumb = Double.parseDouble(periodField.getText());

        for (int i : jList1.getSelectedIndices()){
            ans = eo_values[i];

        }
         jList1 = new JList<String>(eo_names);


        if (radioButton1.isSelected()){
            greaterCondition(radioNumb1);
        }
        else if (radioButton2.isSelected()){
            greaterCondition(radioNumb2);
        }
        else if (radioButton3.isSelected()){
            greaterCondition(radioNumb3);
        }
        else if (radioButton4.isSelected()){
            greaterCondition(radioNumb4);
        }



        answerLabel.setText("" + nfRegular.format(result) + " euro");

    }                                           

それは何ができると思いますか?これが私が行った距離です。

4

1 に答える 1

0

JListオブジェクトは、直面しているようなタスクを処理するように構築されています。

あなたのコメントに対処すると、彼らStringは確かにエントリを処理します。エントリは配列に格納されるため、配列内の位置によって各エントリを参照できます。

私の要点を説明しましょう ( Java APIから引用)。

次のように JList を作成できます。

String[] data = {"one", "two", "three", "four"};
JList<String> myList = new JList<String>(data);

これにより、4 つの文字列を保持するオブジェクトが作成さJListれます ( を記述するときに、この JList が文字列を保持するように指定していることに注意してください<String>。詳細な参照: Java チュートリアル: Generics )。

リストからアイテムを選択すると、 を使用してその位置を取得できます。これは、選択された最小のセル インデックス、またはリストで 1 つのアイテムのみが選択されている場合の選択getSelectedIndex()を返します。

"three"したがって、 JList で次のエントリを選択するとします。

myList.getSelectedIndex(); // Will return 2 (remember arrays are "zero based")

リストで複数のエントリを選択すると、選択したすべてのインデックスの配列が昇順でgetSelectedIndices()返されます。

"one"したがって、エントリを選択して次のようにするとします"three"

myList.getSelectedIndices(); // Will return an array with the values [0, 2]

したがって、特定の状況に対処するには、「EO」値を保持する文字列の配列を作成し、配列を使用して各選択を必要な関連値に「マップ」します。

あなたがやろうとしていることについて具体的なデータを投稿していないので、簡単な例を書きます

 String[] eo_names = {"Value 1", "Value 2", "Value 3", "Value 4", "Value 5"};
 double[] eo_values = {3, 5, 8, 12, 1};
 JList<String> eoList = new JList<String>(eo_names);

それでは、選択した各値の合計を返す小さなメソッドを作成しましょう。

 public double sumSelectedValues() {
     double ans = 0;
     for(int i : eoList.getSelectedIndices()) {
         ans += eo_values[i];
     }
     return ans;
 }

それでは、選択した値 (文字列) を出力する簡単なメソッドを作成しましょう。

 public void printSelectedValues() {
     // getSelectedValueList() replaces getSelectedValues() starting with JDK 1.7
     for(String s : eoList.getSelectedValueList()) {
         System.out.println(s);
     }
 }

これをさらに一歩進めましょう。

タグと値を持つ「EO」リストがあると仮定しています。つまり、「EO」はキーと値の属性のペアです。この種のものはマップで処理できます。

EO のキーと値のペアが次のようになっているとします。

EO   | Value
-----+------
Val1 | 3
Val2 | 5
Val3 | 8
Val4 | 12
Val5 | 1

HashMapこのデータで を作成しましょう:

HashMap<String,Double> myEoMap = new HashMap<String,Double>();
myEoMap.put("Val1",3);
myEoMap.put("Val2",5);
myEoMap.put("Val3",8);
myEoMap.put("Val4",12);
myEoMap.put("Val5",1);

「キー」(putメソッドの最初の引数) は一意でなければならないことに注意してください。

それでは、キー値を使用して JList を作成しましょう。

String[] k = new String[myEoMap.size()];
JList<String> myEoList = new JList<String>(myEoMap.keySet().toArray(k));

それでは、リストで選択した値を出力するための小さなメソッドを書きましょう。

public void printSelectedValues() {
    for(String s : myEoList.getSelectedValueList()) {
        if(myEoMap.containsKey(s)) {
            System.out.println("Key " + s + " found! The value is: " + myEoMap.get(s));
        } else {
            System.err.println("Oops, no value found");
        }
    }
}

お役に立てれば

于 2013-09-17T21:08:34.537 に答える