2016-07-29 5 views
0

私は600行のコードを実行して5つのコンボボックスを作ったのですが、ここで選択したアイテムの合計を表示することはできません私が行ったコンボボックスのコード。5つのコンボボックスの中からユーザーが選択したアイテムの総コストを計算するには

lights.setConverter(new StringConverter<Light>() { 
     @Override 
     public String toString(Light object) { 
      return object.getName(); 
     } 

     @Override 
     public Light fromString(String string) { 
      return null; 
     } 
    }); 



    lights.setItems(FXCollections.observableArrayList 
      (new Light ("Incandescent", 5.23), 
      new Light ("Halogen", 5.75), 
      new Light ("fluorescent",7.29), 
      new Light ("Compact fluorescent bulbs",4.83), 
      new Light ("LED",4.83))); 


    lights.setPromptText("Please select a light"); 
    lights.setPrefWidth(100); 


     lights.valueProperty().addListener((obs, oldVal, newVal) -> { 
     String selectionText = "The price for the " + newVal.getName() + " light is : $" + newVal.getPrice(); 
     lightNamePrice.setText(selectionText); 
    }); 

private class Light { 
    private String name; 
    private Double price; 

    private Double getPrice() { 
     return price; 
    } 

    private String getName() { 
     return name; 
    } 

    private Light(String name, Double price) { 
     this.name = name; 
     this.price = price; 

    } 

} 

私はこれを正しく行っていますか? ユーザーがこのような4つの他のコンボボックスで選択したアイテムの合計コストを見つけるにはどうすればよいですか?

+0

のようなものを行うことができます()getSelectedItemsを()、コンボボックス上でのことをしてみてくださいそれはうまくいくかもしれません。 – Javant

+0

いくつかのコンボボックスに対して600行のコードが過剰なようです。それを減らす方法について考えてみてください。 (コードが反復的であれば、それを他のクラスやメソッドに適宜変換してください。) –

+0

@James_D私が行ったことは、各コンボボックスにはライトコンボボックスのような独自のクラスがあり、クラススイッチなどがあります。 5つのコンボボックスすべてを1つのプライベートクラスで使用できる方法はありますか? ? – max

答えて

1

利用バインディング:。

DoubleBinding total = Bindings.createDoubleBinding(() -> { 
    double total = 0 ; 
    if (lights.getValue() != null) total += lights.getValue().getPrice(); 
    // similarly for other combo boxes... 
    return total ; 
}, lights.valueProperty(), otherComboBox.valueProperty() /* etc for other combos*/); 

をして、あなたはそれがlistView.getSelectionModelである私は、ListViewコントロールに知って

totalPriceLabel.textProperty().bind(total.asString()); 
+0

これをインポートする必要はありますか? – max

+0

コードで参照される明白な2つのクラス: 'javafx.beans.binding.DoubleBinding'と' javafx.beans.binding.Bindings'。 –

+0

私のコードにこのバインディングを入れますか? – max

関連する問題