gpt4 book ai didi

java - 在循环中使用按钮调用方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:01:43 27 4
gpt4 key购买 nike

我创建了一个名为 gPaneCenter 的 gridPane,它旨在创建一个表。当我将一个项目添加到网格时,它会调用 mehtod addRow(),请参见下文:

public static void addRow() {
System.out.println("Test");
Label prodDes = new Label(String.valueOf(Controller.shoppingCart.getOrder(i).getProduct().getDescription()));
Label prodPrice = new Label(String.valueOf(Controller.shoppingCart.getOrder(i).getProduct().getUnitPrice()));
Label prodQuant = new Label(String.valueOf(Controller.shoppingCart.getOrder(i).getQuantity()));
Label prodCost = new Label(String.valueOf(Controller.shoppingCart.getOrder(i).getCost()));

HBox quantityChanger = new HBox();
Button decreaseQuantBut = new Button("-");
Button increaseQuantBut = new Button("+");


decreaseQuantBut.setOnAction(e -> Controller.shoppingCart.getOrder(i).decreaseQuantity());
increaseQuantBut.setOnAction(e -> Controller.shoppingCart.getOrder(i).increaseQuantity());

quantityChanger.getChildren().addAll(decreaseQuantBut,prodQuant,increaseQuantBut);

View.gPaneCenter.addRow(l, prodDes,prodPrice,quantityChanger,prodCost);
l++;
i++;
}

'i' 和 'l' 在开头声明:

static int i = 0;
static int l = 1;

添加项目时生成以下 GUI:

enter image description here

当我单击“-”按钮或“+”按钮时,我想分别减少数量和增加数量,但是当我单击任一按钮时出现以下错误:

Exception in thread "JavaFX Application Thread" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at model.Cart.getOrder(Cart.java:59)

这表明它找不到订单,但它可以成功找到打印以下内容的订单:prodDes、prodPrice 和 prodQuant。

Cart类中调用订单的方法,这也是(Cart.java.59):

    public Order getOrder(int i) {
return contents.get(i);
}

类Order中增加和减少数量的方法:

    public void increaseQuantity() {
quantity++;
}

public void decreaseQuantity() {
quantity--;
}

用于获取 prodQuant 和 prodCost 的方法(prodDes 和 prodUnitPrice 通过 getProduct() ):

    public int getCost() {
return quantity * item.getUnitPrice();
}

public Product getProduct() {
return item;
}

public int getQuantity() {
return quantity;
}

最佳答案

您使用 i 来标识特定行,但是当您添加更多行时 i 的值会发生变化。

public static void addRow() {   
int rowNum = i; //solution: a local variable to keep current i value
.....
decreaseQuantBut.setOnAction(e -> Controller.shoppingCart.getOrder(rowNum).decreaseQuantity());
increaseQuantBut.setOnAction(e -> Controller.shoppingCart.getOrder(rowNum).increaseQuantity());
.....
}

关于java - 在循环中使用按钮调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49130278/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com