我使用 javafx 和场景生成器制作了一个 GUI。我当前的任务是从类中调用信息,以便我可以在我的 GUI 中显示它。我在一个数组中初始化了 3 个对象,现在我尝试使用 for 循环创建这些对象。但是,当我编写 for 循环时,出现“意外标记”错误。我没有看到任何红线或语法错误。
这是我的代码(粗体字是发生错误的地方):
package com.example.moonbucksgui4;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
public class GUIController {
@FXML
private Label drinkText;
@FXML
private Label mugText;
@FXML
private Label gcText;
private Drinks[] drinksMenu = new Drinks[3];
private String[] names = {"Cappuccino", "Latte", "Hot Chocolate"};
/* Drink Info */
private int[] calories = {60,130,320};
private String[] sizes = {"Tall","Grande","Venti"};
private double[] fat = {0.1, 0.3, 3.0};
private int[] sugar = {8,18,55};
private double[] price = {5.99, 10.99, 15.35};
/* Drink Classes */
for(int i=0; i < drinksMenu.length; i++)
@FXML
protected void drinkButtonClick(){
drinkText.setText("These are Drinks");
mugText.setText("");
gcText.setText("");
}
@FXML
protected void mugButtonClick(){
mugText.setText("These are mugs");
drinkText.setText("");
gcText.setText("");
}
@FXML
protected void gcButtonClick(){
gcText.setText("These are Gift Cards");
drinkText.setText("");
mugText.setText("");
}
}
正如 SedJ601 所指出的,初始化控制器中字段的指令,请使用
initialize()
方法:
public void initialize() {
for (int i=0; i < drinksMenu.length; i++) {
drinksMenu[i] = new Drinks(names[i], calories[i], sizes[i], fat[i], sugar[i], price[i]);
}
}
但是,在您的示例中,饮料本身是数据,因此可能根本不应该在控制器中初始化,但
drinksMenu
应该在应用程序的其他位置创建并传递到控制器。
对于像示例中这样的少量硬编码数据,您可以内联初始化它,而无需像这样的循环:
record Drink(
String name,
int calories,
String size,
double fat,
int sugar,
BigDecimal price
) {}
private final List<Drink> drinks = List.of(
new Drink("Cappuccino", 60, "Tall", 0.1, 8, new BigDecimal("5.99")),
new Drink("Latte", 130, "Grande", 0.3, 18, new BigDecimal("10.99")),
new Drink("Hot Chocolate", 320, "Venti", 3.0, 38, new BigDecimal("15.35"))
);
我使用
BigDecimal
而不是 double
来表示价格,因为 BigDecimal
更适合表示货币价值。