执行actionPerformed
后会发生什么?有没有什么办法可以在actionPerformed
执行后返回到程序的主类?
以下是代码示例:
public final class JavaGame extends JFrame {
public JavaGame(){
int x = cache();
JButton butt = new JButton("NEW");
newG gameX = new newG();
butt.addActionListener(gameX);
}
public class gameFunction implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
if(e.getSource() == butt){
//do something logic here. Like go to another stage of the game
JOptionPane.showMessageDialog(null, Success!");
}
}
}
public cache(){
return 1;
}
public static void main(String[] args) {
new JavaGame();
}
}
actionPerformed
运行后,接下来会发生什么?
在我的真实代码中,actionPerformed
运行后,我的游戏阶段仍然相同。我怎样才能回到main
以便我可以在不关闭并再次打开程序的情况下开始一个新阶段?
答案 0 :(得分:2)
在主要内容中显示JFrame:
new JavaGame().setVisible(true);
然后你从main返回。
在后台有一个运行的线程,称为EDT,事件调度线程。 在该线程按钮点击,重新绘制等处理。
这应该在短时间内完成,以保持用户界面的响应,而不是冻结。
所以你需要工作事件驱动:你经常可以为某些特定事件添加一个监听器,比如关闭JFrame,菜单项,按钮。使用事件对象调用这些侦听器,指定发生的事件。你调用了addActionListener。
控制流程是让按钮点击响应,稍后再努力工作:
@Override
public void actionPerformed(ActionEvent evt) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JavaGame.this.createANewAvatar();
}
});
}
然后某处有一个
private void createNeewAvatar() { ... }
这种难以遵循的控制流程(因为片段化)需要良好的命名和有组织的来源。
答案 1 :(得分:2)
作为一个具体的例子,这个简单的game包含一个重置按钮,可以在游戏模型上调用reset()
。监听视图将null
值arg
视为相应更新显示的信号。