gpt4 book ai didi

java - 如何连接UI和功能?

转载 作者:行者123 更新时间:2023-12-01 13:46:47 24 4
gpt4 key购买 nike

我只是 Java 的初学者,到目前为止我只是将功能放入按钮的 addActionListener() 方法中,这对于小游戏和其他东西来说已经足够了。

但现在我正在认真地尝试,我想知道如何连接这两个。

作为一个例子,我正在制作一个 Fuchimi 游戏,所以我有实际游戏的类,然后是一个用所需的一切构建框架的类。

但我现在的实际问题是,创建框架后,它不会执行以下代码,因为代码在窗口处暂停,如下所示:

    FuchimiUI ui = new FuchimiUI();

//The following is not executed
Hand playerHand = null;
while (playerHand == null) {
playerHand = ui.getPlayerHand();
}
Hand enemyHand = generateHand();
ui.changeEnemyText("Enemy picked " + enemyHand.toString());
if (enemyHand.beats(playerHand)) {
ui.changeGenText("Computer wins!");
} else
ui.changeGenText("You win!");

我刚刚改变玩家手牌的按钮。

那么我怎样才能正确地做到这一点,在框架已经打开的情况下编译游戏代码?
我考虑过线程,但我对线程的了解太少,所以我不知道这是否是一个好方法。

编辑:
ui.getPlayerHand() 方法返回玩家通过按钮选择的手(石头、布或剪刀)。
当然,我可以在每个按钮的 addActionListener() 方法中编写整个代码,但我怀疑这是否是正确的方法。

所以总的来说,我想做的就是让玩家选择他的手牌,然后让游戏生成随机手牌,然后比较这两个手牌并更改其中一个标签的文本,具体取决于玩家是否获胜或不是。

最佳答案

您遇到的问题是由于您的 while 循环阻塞了 UI 线程。您需要将其卸载到另一个线程,然后将 UI 更新重新排入 UI 线程。遇到同样的情况here ,请看一下。

有多种方法可以解决此问题。其中之一是SwingWorker .

步骤是:

  1. 重写 while 循环的 doInBackground
  2. 在其中调用 publish 来存储中间结果(例如您要显示的消息)。
  3. 重写 process 以在 UI 中显示中间结果。

The third page of above mentioned tutorial涵盖了这一点。

关于java - 如何连接UI和功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20308106/

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