あなたはボタンの押下は、いくつかの数の値を変更したい場合は、その番号を保持する変数を定義する必要があります。何らかの点で丸め誤差が累積する浮動小数点演算を繰り返し実行しないようにするには、その変数に整数のセントの数(または通貨の等価数)を保持させるのが最善の方法です。
さらに、テキストフィールド(またはラベル)がその値に対応するテキスト値を常に表示しやすいように、JavaFX observable propertyを使用すると便利です。
private IntegerProperty totalCents = new SimpleIntegerProperty();
をしてからお使いのディスプレイは、そのプロパティの書式設定のバージョンにそのテキストをバインドさせることができます:
だから私はどうしたら最後に
display.textProperty().bind(totalCents.divide(100.0).asString("$ %.2f"));
、あなたのボタンだけで更新する必要があります数値:
private Button createNumberButton(int value) {
Button button = new Button(Integer.toString(value));
button.setOnAction(e -> totalCents.set(totalCents.get() * 10 + value));
return button ;
}
はここSSCCEです:
import javafx.application.Application;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class PaymentPad extends Application {
private IntegerProperty totalCents = new SimpleIntegerProperty();
@Override
public void start(Stage primaryStage) {
GridPane pad = new GridPane();
pad.setHgap(2);
pad.setVgap(2);
pad.add(createNumberButton(0), 0, 4);
for (int i = 1 ; i <= 9 ; i++) {
int columnIndex = (i-1) % 3;
int rowIndex = 3 - (i-1) /3 ;
pad.add(createNumberButton(i), columnIndex, rowIndex);
}
Button clearButton = createButton("C");
clearButton.setOnAction(e -> totalCents.set(0));
pad.add(clearButton, 1, 4, 2, 1);
Label display = new Label();
display.textProperty().bind(totalCents.divide(100.0).asString("$%.2f"));
display.setMaxWidth(Double.MAX_VALUE);
display.setAlignment(Pos.CENTER_RIGHT);
pad.add(display, 0, 0, 3, 1);
Scene scene = new Scene(pad);
primaryStage.setScene(scene);
primaryStage.show();
}
private Button createNumberButton(int value) {
Button button = createButton(Integer.toString(value));
button.setOnAction(e -> totalCents.set(totalCents.get()*10+value));
return button ;
}
private Button createButton(String text) {
Button button = new Button(text);
button.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
GridPane.setFillHeight(button, true);
GridPane.setFillWidth(button, true);
return button ;
}
public static void main(String[] args) {
launch(args);
}
}
'pamount.getText()'と 'value'は' String'です。小数点はありません。だから、ちょうど最後に桁を追加するだけで浮動価値を得る方法を正確に説明する必要があるかもしれません。 – AxelH