我是一个相当基本的程序员谁被分配使GUI程序没有任何先前的经验与创建GUI。使用NetBeans,我设法设计了我认为GUI应该是什么样子的,以及按下某些按钮时应该做什么,但是主程序在继续之前不会等待用户输入。我的问题是,如何让这个程序等待输入?
public class UnoMain {
public static void main(String args[]) {
UnoGUI form = new UnoGUI(); // GUI class instance
// NetBeans allowed me to design some dialog boxes alongside the main JFrame, so
form.gameSetupDialog.setVisible(true); // This is how I'm trying to use a dialog box
/* Right around here is the first part of the problem.
* I don't know how to make the program wait for the dialog to complete.
* It should wait for a submission by a button named playerCountButton.
* After the dialog is complete it's supposed to hide too but it doesn't do that either. */
Uno Game = new Uno(form.Players); // Game instance is started
form.setVisible(true); // Main GUI made visible
boolean beingPlayed = true; // Variable dictating if player still wishes to play.
form.playerCountLabel.setText("Players: " + Game.Players.size()); // A GUI label reflects the number of players input by the user in the dialog box.
while (beingPlayed) {
if (!Game.getCompleted()) // While the game runs, two general functions are repeatedly called.
{
Player activePlayer = Game.Players.get(Game.getWhoseTurn());
// There are CPU players, which do their thing automatically...
Game.Turn(activePlayer);
// And human players which require input before continuing.
/* Second part of the problem:
* if activePlayer's strategy == manual/human
* wait for GUI input from either a button named
* playButton or a button named passButton */
Game.advanceTurn();
// GUI updating code //
}
}
}
}
我花了大约三天的时间来弄清楚如何集成我的代码和GUI,所以如果有人能告诉我如何使这一件事工作,我会很感激。如果你还需要其他信息来帮助我,请问我。
编辑:基本上,教授让我们制作一个带有GUI的Uno游戏。游戏中可以有电脑和人类玩家,玩家的数量由玩家在游戏开始时决定。我一开始基于主机编写了所有内容,以确保游戏核心能够运行,并尝试着设计GUI;目前,这个GUI只在游戏运行时显示有关游戏的信息,但我不确定如何让代码等待并接收来自GUI的输入,而不让程序提前收费。我已经调查了其他StackOverflow问题,比如这个,这个,这个,或者这个,但我不明白如何将答案应用到我自己的代码中。如果可能的话,我想一个答案类似于在链接的答案(与代码的答案,我可以检查和/或使用)。如果我听起来要求很高,没有受过教育,令人困惑,我道歉;我已经在这个项目上努力工作了几个星期了,现在明天就要交了,我一直很紧张,因为在我解决这个问题之前我不能前进。TL;DR -如何让主程序等待并侦听按钮单击事件?我应该使用模态对话框,还是有其他的方法来做到这一点?在这两种情况下,需要修改哪些代码来实现它?
与基于主机的编程不同,它通常具有良好定义的执行路径,GUI应用在事件驱动的环境中运行。事件从外部进入,你对它们做出反应。可能会发生许多类型的事件,但通常,我们感兴趣的是那些由用户通过鼠标点击和键盘输入产生的事件。
这改变了GUI应用程序的工作方式。
例如,你需要摆脱你的while循环,因为这在GUI环境中是非常危险的事情,因为它通常会"冻结"应用程序,使它看起来像你的应用程序挂起了(实际上是挂起了)。
相反,你应该在你的UI控件上提供一系列的监听器来响应用户输入并更新某种模型,这可能会影响你UI上的其他控件。
为了回答你的问题,你不用(等待用户输入),应用程序已经在等待了,但是你通过侦听器捕获输入并根据需要对它们进行操作