actionPerformed执行后会发生什么?

时间:2014-08-12 15:16:00

标签: java swing

执行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以便我可以在不关闭并再次打开程序的情况下开始一个新阶段?

2 个答案:

答案 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()。监听视图将nullarg视为相应更新显示的信号。

image