Java actionPerformed执行后会发生什么?
执行Java actionPerformed执行后会发生什么?,java,swing,Java,Swing,执行操作执行后会发生什么?在执行actionPerformed之后,有没有办法返回程序的主类 以下是代码示例: public final class JavaGame extends JFrame { public JavaGame(){ int x = cache(); JButton butt = new JButton("NEW"); newG gameX = new newG(); butt.addActionL
操作执行后会发生什么?在执行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
,以便在不关闭和再次打开程序的情况下开始新阶段 在主视图中,您将显示JFrame:
new JavaGame().setVisible(true);
然后你从主机场回来
在后台有一个线程正在运行,称为EDT,事件调度线程。
在该线程上,可以处理按钮单击、重新绘制等操作
这应该在短时间内完成,以保持用户界面的响应性,而不是冻结
因此,您需要使用事件驱动:您通常可以为某些特定事件添加侦听器,如关闭JFrame、菜单项和按钮。这些侦听器由指定发生了什么的事件对象调用。你打电话给addActionListener
控制流程是保持按钮点击的响应性,稍后再做艰苦的工作:
@Override
public void actionPerformed(ActionEvent evt) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JavaGame.this.createANewAvatar();
}
});
}
然后在某个地方有一个
private void createNeewAvatar() { ... }
这一难以遵循的控制流(因为支离破碎)需要良好的命名和有组织的源。在主要部分,您展示了JFrame:
new JavaGame().setVisible(true);
然后你从主机场回来
在后台有一个线程正在运行,称为EDT,事件调度线程。
在该线程上,可以处理按钮单击、重新绘制等操作
这应该在短时间内完成,以保持用户界面的响应性,而不是冻结
因此,您需要使用事件驱动:您通常可以为某些特定事件添加侦听器,如关闭JFrame、菜单项和按钮。这些侦听器由指定发生了什么的事件对象调用。你打电话给addActionListener
控制流程是保持按钮点击的响应性,稍后再做艰苦的工作:
@Override
public void actionPerformed(ActionEvent evt) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JavaGame.this.createANewAvatar();
}
});
}
然后在某个地方有一个
private void createNeewAvatar() { ... }
这个难以遵循的控制流(因为不完整)需要一个好的命名和有组织的源。作为一个具体的例子,这个简单的例子包括一个重置按钮,在游戏模型上调用Reset()
。侦听视图将arg的null
值视为相应更新显示的信号
作为一个具体的例子,这个简单的例子包括一个重置按钮,在游戏模型上调用Reset()
。侦听视图将arg的null
值视为相应更新显示的信号
我讨厌不成熟,但如果(例如getSource()==butt)lol。GUI应用程序不是这样工作的。您只需启动它并继续处理分派给侦听器的事件。因此,当actionperformed终止时,除了等待下一个事件的应用程序外,不会再发生任何其他事情。我认为您将从中受益匪浅,或者至少从和部分中受益匪浅。顺便说一下,我认为这本身就是一个不错的问题,但我认为您应该删除“在我的真实代码中,在actionPerformed运行之后,我的游戏阶段仍然是一样的。我怎样才能回到main,这样我就可以开始一个新的阶段,而不必再次关闭和打开程序?“分开,让问题单独存在。这里没有足够的信息来诊断您的实际游戏中的问题,这可能有不同的原因,如果存在这些问题,您的问题可能会被关闭。如果你在阅读了这里的答案后仍然有问题,我建议你提出一个新的问题。我讨厌不成熟,但是如果(e.getSource()==butt)lol。这不是GUI应用程序的工作方式。您只需启动它并继续处理分派给侦听器的事件。因此,当actionperformed终止时,除了等待下一个事件的应用程序外,不会再发生任何其他事情。我认为您将从中受益匪浅,或者至少从和部分中受益匪浅。顺便说一下,我认为这本身就是一个不错的问题,但我认为您应该删除“在我的真实代码中,在actionPerformed运行之后,我的游戏阶段仍然是一样的。我怎样才能回到main,这样我就可以开始一个新的阶段,而不必再次关闭和打开程序?“分开,让问题单独存在。这里没有足够的信息来诊断您的实际游戏中的问题,这可能有不同的原因,如果存在这些问题,您的问题可能会被关闭。如果你在阅读了这里的答案后仍然有问题,我建议你提出一个关于这个问题的新问题。JavaGame.this
指的是什么?gameFunction?这里有许多嵌套类:JavaGame。这个
类似于对象的一个隐式字段。它还有一个Runnable。通过JavaGame。您可以访问JavaGame对象的成员(方法、字段)。一般来说,您可以省去它,只需调用createANewAvatar()
。JavaGame是指什么?gameFunction?这里有许多嵌套类:JavaGame。这个
类似于对象的一个隐式字段。它还有一个Runnable。通过JavaGame。您可以访问JavaGame对象的成员(方法、字段)。通常,您可以省去它,只需调用createANewAvatar()
。