首页 > 解决方案 > 单击按钮2时如何更新按钮1上的计数器

问题描述

我有两个按钮,button1 包含 getMoney() 来显示金额,而 button2 则只有 25 美元的图片。当我单击 button2 时,它应该将 button1 更新为 25 个以上。我在处理程序中使用 setMoney() 执行此操作,但尽管它更改了货币变量,但在 GUI 上显示的金额不会改变。

我尝试将变量设为静态,因为在一个地方更改它会在任何地方更改它。但它在现场的按钮中仍然保持不变。我知道变量会发生变化,因为在控制台中打印它会增加 25 美元。我也尝试直接获取变量,但无济于事,而不是 getMoney() 因为我相信,当货币变量发生变化时,它会直接更新它。我还尝试创建一个标签并将其放置在按钮中,然后在处理程序中使用标签上的 .setText 但这也不会改变显示的数量。

两个按钮都设置在同一个类中。这种方法建立货币形象。我必须将 StackPane 放在窗格中才能在货币图像按钮上使用 .setX 和 .setY。

public void setup() throws Exception{

StackPane root = new StackPane();
root.getChildren().add(gameButtons(game.getPlayer(), game));

Pane fullImage = new Pane(root);

Button dollarButton = new Dollar().getDollarButton();
dollarButton.setOnAction(new DollarButtonHandler(game.getPlayer()));
fullImage.getChildren().add(dollarButton);
}

创建美元计数器的方法是这样的:

public static Button getSunCounter(Player aPlayer) throws Exception {
    ImageView bills = new ImageView(new Image(new FileInputStream("dollarBills.png")));
    dollarCounter = new Button("Dollars: " + aPlayer.getMoney(), bills);
    return dollarCounter;
}

添加美元计数器的方法在 gameButtons 节点中。

public Node gameButtons(Player aPlayer, Game aGame) throws Exception{
HBox root = new HBox();
root.getChildren().add(getDollarCounter());
return root;
}

这是钱图像按钮处理程序。

public class MoneyButtonHandler implements EventHandler<ActionEvent> {
private Player player;
public MoneyButtonHandler(Player player) {
    this.player = player;
}
@Override
public void handle(ActionEvent event) {
    Button source = (Button) event.getSource();     
    player.increaseMoney();
            System.out.println(player.getMoney()); //prints 75, which is correct
ImageView bills = null;
    try {
        bills = new ImageView(new Image(new FileInputStream("dollarBills.png")));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    Button dollarCounter = null;
    try {
        dollarCounter = GardenScene.getDollarCounter(player);
    } catch (Exception e) {
        e.printStackTrace();
    }
    dollarCounter.setText("" + player.getMoney(), bills);//error here, can't put image
//without the 'bills' parameter it still does not change the dollar variable in the GUI
}
}

money 变量及其方法在玩家类中。

public class Player {
private int money = 50;

public Player(int aMoney) {
    this.money = aMoney;
}
public Player() {}

public int getMoney() {
    return this.money;
}
public void increaseMoney() {
    this.money += 25;
}
}

虽然我可以更改变量,但更改不会显示在 GUI 中。我更新了我的代码以显示我如何尝试使用 .setText() 但问题是我不能再将图像添加到 DollarCounter,而且当我不考虑添加图像时,它仍然没有改变显示的计数器。

我使用的是按钮而不是标签,因为我需要标签位于矩形中并带有图像,我不知道如何使用标签来做到这一点,但我可以查看它。在此先感谢您的帮助!

标签: javafx

解决方案


推荐阅读