В программе по заказу мороженого надо создать Label с ценой к продукту, она должна меняться в зависимости от текущего выбора продуктов в мороженом
Я хочу создать так называемый "Конструктор мороженого" как в некоторых программах доставки. Для такого надо создать "ценник" который будет меняться в зависимости от того что выбрал пользователь пломбир или же ванильное мороженое. Проблема в том, что у меня идёт выбор не только типа мороженого, но и добавок к нему, а также с каким вкусом оно будет. Вот код того что я пытаюсь сделать:
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;
import java.net.URL;
import java.util.ResourceBundle;
public class IceCreamController implements Initializable
{
@FXML
public ChoiceBox<String> IceCreamFlavor;
@FXML
public ComboBox<String> IceCreamType;
@FXML
public CheckBox S1, S2, S3;
@FXML
public Button ToOrder;
@FXML
public ListView<String> Orders;
@FXML
public Label Price;
@Override
public void initialize(URL url, ResourceBundle resourceBundle)
{
//Виды и вкусы мороженого
IceCreamType.getItems().addAll("Пломбир", "Шоколадное", "Ванильное");
IceCreamFlavor.getItems().addAll("Яблочный", "Банановый", "Клубничный", "Апельсиновый", "Грушевый");
//Выбор вкуса и вида мороженого
IceCreamType.setOnAction(event -> getPriceForType());
IceCreamFlavor.setOnAction(event -> getPriceForFlavor());
//Выбор добавок
String Supplements = "";
if(S1.isSelected()) Supplements += "Шококлад ";
if(S2.isSelected()) Supplements += "Орехи ";
if(S3.isSelected()) Supplements += "Джем ";
if(Supplements.equals("")) Supplements += "Нет ";
String finalSupplements = Supplements;
//Помещение заказа в историю
ToOrder.setOnAction(actionEvent -> Orders.getItems().addAll("Мороженое: " + IceCreamType.getValue() + "; Вкус: " + IceCreamFlavor.getValue() + "; Добавки: " + finalSupplements));
}
public void setText(int price)
{
Price.setText(String.valueOf(price));
}
public void getPriceForType ()
{
//Цена вида мороженого
int price = 0;
if(IceCreamType.getValue().equals("Пломбир") || IceCreamType.getValue().equals("Шоколадное")){
price = 14;
}else {
price = 10;
}
setText(price);
}
public void getPriceForFlavor ()
{
//Цена за вкусы мороженого
int price = 0;
if (IceCreamFlavor.getValue().equals("Яблочный") || IceCreamFlavor.getValue().equals("Банановый")) price += 5;
else price += 7;
Price.setText(String.valueOf(price));
}
public void getPriceForSupplements ()
{
int price = 0;
//Цена за добавки к мороженому
if(S1.isSelected()) price += 4;
if(S2.isSelected()) price += 2;
if(S3.isSelected()) price += 5;
Price.setText(String.valueOf(price));
}
}
Мне хотелось бы чтоб цена менялась после каждого выбора продукта соответственно. Можете ли дать совет как это грамотно реализовать? Если нужен fxml файл то вот он:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="247.0" prefWidth="443.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.IceCreamController">
<children>
<ComboBox fx:id="IceCreamType" layoutX="20.0" layoutY="24.0" prefHeight="26.0" prefWidth="180.0" />
<ChoiceBox fx:id="IceCreamFlavor" layoutX="20.0" layoutY="142.0" prefHeight="26.0" prefWidth="180.0" />
<CheckBox fx:id="S1" layoutX="20.0" layoutY="58.0" mnemonicParsing="false" text="Шоколад" />
<CheckBox fx:id="S2" layoutX="20.0" layoutY="86.0" mnemonicParsing="false" text="Орехи" />
<CheckBox fx:id="S3" layoutX="20.0" layoutY="114.0" mnemonicParsing="false" text="Джем" />
<Button fx:id="ToOrder" layoutX="20.0" layoutY="179.0" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" prefHeight="26.0" prefWidth="180.0" text="Заказать" />
<ListView fx:id="Orders" layoutX="222.0" layoutY="23.0" prefHeight="181.0" prefWidth="200.0" AnchorPane.bottomAnchor="42.400000000000006" AnchorPane.leftAnchor="222.0" AnchorPane.rightAnchor="21.0" AnchorPane.topAnchor="23.0" />
<Label layoutX="124.0" layoutY="213.0" prefHeight="18.0" prefWidth="39.0" text="Цена: " />
<Label fx:id="Price" layoutX="169.0" layoutY="214.0" prefHeight="18.0" prefWidth="31.0" />
</children>
</AnchorPane>
Примечание: Я только учусь писать такие программы и в Java я тоже недавно. Поэтому если заметите ошибки и неформальности, пожалуйста напишите про них)
Ответы (1 шт):
Я немного не понял полного смысла да и кода в целом, так что надеюсь мои "слова" помогут. На самом деле есть несколько вариантов, к примеру:
Создай метод в контролере, для изменения текста кнопки и после каждого выбора (после кнопки окей или любого Action) вызывай этот метод и передавай тот тип мороженого который выбран.
Если будут трудности, могу добавить код, но это уже завтра и за надобностью