我是一名相当基本的程序员,他被指派制作一个没有任何创建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问题,例如this,this,this或this,但我无法理解如何将答案应用于我自己的代码。如果可能的话,我想要一个类似于链接中答案的答案(我可以检查和/或使用代码的答案)。如果我听起来要求苛刻或没有受过教育和混淆,我道歉;我已经在这个项目上努力工作了几个星期,而且现在明天到期了,我一直在强调,因为在我弄明白之前我无法前进。
TL; DR - 如何让我的主程序等待并听取按钮点击事件?我应该使用模态对话框,还是有其他方法可以做到这一点?在任何一种情况下,需要更改哪些代码才能执行此操作?
答案 0 :(得分:1)
与基于控制台的编程不同,GUI编程通常具有明确定义的执行路径,GUI应用程序在事件驱动的环境中运行。事件从外部进入,你对它们作出反应。可能会发生许多类型的事件,但通常情况下,我们对用户通过鼠标点击和键盘输入生成的事件感兴趣。
这改变了GUI应用程序的工作方式。
例如,您需要摆脱while循环,因为这在GUI环境中是非常危险的,因为它通常会“冻结”应用程序,使其看起来像您的应用程序已挂起(本质上它有)。
相反,你会在你的UI控件上提供一个严肃的监听器来响应用户输入并更新某种模型,这可能影响你的UI上的其他控件。
所以,为了尝试回答你的问题,你有点不做(等待用户输入),应用程序已经是,但是你通过监听器捕获了那个输入,并根据需要对它们采取行动。