javafx - 单击按钮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,而且当我不考虑添加图像时,它仍然没有改变显示的计数器。
我使用的是按钮而不是标签,因为我需要标签位于矩形中并带有图像,我不知道如何使用标签来做到这一点,但我可以查看它。在此先感谢您的帮助!
解决方案
推荐阅读
- apache-spark - 由于 PySpark 时间戳,将 Spark 数据帧保存到 Azure Synapse 时出现问题
- java - 保存父对象时,防止休眠自动删除@Transient子对象
- amazon-web-services - 如何允许 kubernetes 中的单个 serviceaccount 使用来自不同集群的角色?
- tensorflow - 在多个音频帧上训练 CNN
- vim - 是否可以将特定标签文件添加到 vim 中的特定窗口/缓冲区?
- django - 有没有办法在开发过程中在移动设备上加载 django 网站?
- azure-api-management - API Management + App Gateway 用于托管面向 Internet 的 API 的用例
- swiftui - SwiftUI Negative Padding Z 顺序
- c++ - 如何使用旧的 stdlib 和 libc 在旧的 linux 发行版中构建 C++17 应用程序?
- flutter - 因此,firebase_core ^0.7.0 与 cloud_firestore ^0.14.0 不兼容