繁体   English   中英

如何在我的 Lambda 表达式中使用我的文本字段和滑块输入?

[英]How can I use my text field and slider input in my Lambda expression?

我目前正在制作小费计算器,但遇到了麻烦。 我的教科书Big Java, Late Objects没有答案。 我也搜索了堆栈溢出和一些 Reddit,但我只能部分解决我的困境。 我觉得我在正确的轨道上。 问题出在连接到calculateTipButton的 lambda 表达式calcTipClick 中 编辑如何使用来自滑块、拆分检查和 checkAmtTextField 的用户输入来计算 GUI。 对不起

public class TipCalcApp extends Application {
    // declare interface controls

    Label titleLabel, checkAmtLabel, tipPercentLabel, splitLabel, tipAmtLabel;
    Label totalLabel, amtPerPersonLabel;

    TextField checkAmtText, tipAmtText, totalText, amtPerPersonText;

    Slider tipPercentSlider;

    ChoiceBox splitChoiceBox;

    Button calcTipButton;

    // declare a grid pane (8 rows and 2 columns)
    GridPane grid;

    @Override
    public void start(Stage primaryStage) {

        // instantiate labels and their properties
        titleLabel = new Label("Tip Calculator");
        titleLabel.setMaxWidth(Double.MAX_VALUE);
        titleLabel.setAlignment(Pos.CENTER);
        checkAmtLabel = new Label("Check Amount");
        checkAmtLabel.setMaxWidth(Double.MAX_VALUE);
        checkAmtLabel.setAlignment(Pos.CENTER_RIGHT);
        tipPercentLabel = new Label("Tip Percent: ");
        tipPercentLabel.setMaxWidth(Double.MAX_VALUE);
        tipPercentLabel.setAlignment(Pos.CENTER_RIGHT);
        splitLabel = new Label("Split");
        splitLabel.setMaxWidth(Double.MAX_VALUE);
        splitLabel.setAlignment(Pos.CENTER_RIGHT);
        tipAmtLabel = new Label("Tip Amount");
        tipAmtLabel.setMaxWidth(Double.MAX_VALUE);
        tipAmtLabel.setAlignment(Pos.CENTER_RIGHT);
        totalLabel = new Label("Total");
        totalLabel.setMaxWidth(Double.MAX_VALUE);
        totalLabel.setAlignment(Pos.CENTER_RIGHT);
        amtPerPersonLabel = new Label("Amount Per Person");
        amtPerPersonLabel.setMaxWidth(Double.MAX_VALUE);
        amtPerPersonLabel.setAlignment(Pos.CENTER_RIGHT);

        // instantiate text fileds and their properties
        checkAmtText = new TextField();
        tipAmtText = new TextField();
        tipAmtText.setEditable(false);
        totalText = new TextField();
        totalText.setEditable(false);
        amtPerPersonText = new TextField();
        amtPerPersonText.setEditable(false);

        // instantiate a slider and its properties 
        tipPercentSlider = new Slider();
        tipPercentSlider.setPrefWidth(300);
        tipPercentSlider.setMin(0);
        tipPercentSlider.setMax(25);
        tipPercentSlider.setMajorTickUnit(5);
        tipPercentSlider.setMinorTickCount(0);
        tipPercentSlider.setBlockIncrement(5);
        tipPercentSlider.setShowTickLabels(true);
        tipPercentSlider.setShowTickMarks(true);
        tipPercentSlider.setSnapToTicks(true);
        tipPercentSlider.setOrientation(Orientation.HORIZONTAL);
        tipPercentSlider.valueProperty().addListener(
                (observable, oldvalue, newvalue) ->
                {
                    // show integer values only
                    tipPercentLabel.setText(String.format("Tip Percent: %2d%s", newvalue.intValue(), "%"));
                });

        // instantiate a choice box and its properties
        splitChoiceBox = new ChoiceBox();
        splitChoiceBox.getItems().addAll("1", "2", "3", "4", "5");
        splitChoiceBox.setValue("1");

        // instantiate a button and its properties
        calcTipButton = new Button("Calculate Tip");
        calcTipButton.setMaxWidth(Double.MAX_VALUE);
        calcTipButton.setOnAction(e -> calcTipClick());

        // instantiate a grid pane and its properties
        grid = new GridPane();
        grid.setHgap(15);
        grid.setVgap(15);
        grid.setPadding(new Insets(10));
        grid.add(titleLabel, 0, 0, 2, 1);
        grid.addRow(1, checkAmtLabel, checkAmtText);
        grid.addRow(2, tipPercentLabel, tipPercentSlider);
        grid.addRow(3, splitLabel, splitChoiceBox);
        grid.add(calcTipButton, 0, 4, 2, 1);
        grid.addRow(5, tipAmtLabel, tipAmtText);
        grid.addRow(6, totalLabel, totalText);
        grid.addRow(7, amtPerPersonLabel, amtPerPersonText);

        // instantiate the grid pane and put items in in grid

        Scene scene = new Scene(grid);
        scene.getRoot().setStyle("-fx-font: 15 'Comic Sans MS'");

        primaryStage.setTitle("Tip Calculator");
        primaryStage.setScene(scene);
        primaryStage.show();
    }


    private void calcTipClick() {

        //Gather choiceBox
        String choiceInput = splitChoiceBox.getValue().toString();
        int choiceSelection = Integer.parseInt(choiceInput.substring(0, 1));

        //Gather Slider information
        String sliderInput;
        sliderInput = tipPercentLabel.getValue().toString();
        int sliderSelection = Integer.parseInt(sliderInput.substring(0, 1));

        //Gather textField amount

    }

不确定这是否是您要问的问题,但这是关于如何计算小费并将其在 calcTipClick() 方法中拆分的想法。 您应该查看格式化程序以确保格式、四舍五入等。但这应该为您提供总体思路。

private void calcTipClick() {

    //Gather choiceBox
    String choiceInput = splitChoiceBox.getValue().toString();
    int choiceSelection = Integer.parseInt(choiceInput.substring(0, 1));

    //Gather Slider information
    Number sliderInput = tipPercentSlider.getValue();

    //Gather textField amount
    String val = checkAmtText.getText();
    NumberStringConverter nsc = new NumberStringConverter();
    Number amount = 0;
    try {
        amount = nsc.fromString(val);
    }catch (Exception pe) {
        //Need to handle a parse error if the user isn't entering numbers
        //Should look at text formatters to ensure amount is only entered valid
        amount = 0;
    }
    Number tipAmount = amount.doubleValue() * sliderInput.doubleValue()/100;
    tipAmtText.setText(tipAmount.toString());

    Number totalAmount = tipAmount.doubleValue() + amount.doubleValue();
    totalText.setText(totalAmount.toString());

    Number perPerson = totalAmount.doubleValue() / choiceSelection;
    amtPerPersonText.setText(perPerson.toString());

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM