单击button2时如何更新button1上的计数器

时间:2019-08-02 22:49:26

标签: javafx

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

我尝试过将变量设为静态,因为在一处更改它会在任何地方更改它。但是它在场景中的按钮中仍然保持不变。我知道变量会更改,因为在控制台中打印它会使钱增加25美元。我还尝试过直接获取该变量,但无济于事,而不是getMoney(),因为我相信,当money变量更改时,它将直接对其进行更新。我还尝试创建标签并将其放置在按钮中,然后在标签上使用.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,而且当我不考虑添加图像时,它仍然不会改变显示的计数器。

我使用的是Button而不是Label,因为我需要将Label放置在带有图像的矩形中,并且我不知道如何使用Label进行操作,但是我可以研究一下。 预先感谢您的帮助!

0 个答案:

没有答案
相关问题