Java 根据布尔值是否等于true或false删除/添加JComponents
在我目前正在制作的游戏中,我刚刚创建了一个起始屏幕。开始屏幕有4个按钮,包括播放、选项、信用和退出。如果你按Play,另一个JButton将出现,新游戏 我不希望这样,当你按下“新建游戏”按钮时,开始屏幕消失,游戏开始(实际游戏和开始屏幕都会扩展Java 根据布尔值是否等于true或false删除/添加JComponents,java,swing,timer,jbutton,actionlistener,Java,Swing,Timer,Jbutton,Actionlistener,在我目前正在制作的游戏中,我刚刚创建了一个起始屏幕。开始屏幕有4个按钮,包括播放、选项、信用和退出。如果你按Play,另一个JButton将出现,新游戏 我不希望这样,当你按下“新建游戏”按钮时,开始屏幕消失,游戏开始(实际游戏和开始屏幕都会扩展JComponent) 我有一个单独的类来运行游戏和处理游戏中的选项菜单 在starting screen类中,我有一个名为startName的布尔值,该布尔值默认等于false,当您按下New Game按钮时,它将等于true。在开始菜单类中,我还有一
JComponent
)
我有一个单独的类来运行游戏和处理游戏中的选项菜单
在starting screen类中,我有一个名为startName的布尔值,该布尔值默认等于false,当您按下New Game按钮时,它将等于true。在开始菜单类中,我还有一个公共方法,返回startName的值,如下所示
public boolean checkGame(){
return startGame;
}
if(menu.checkGame() == false){
frame.add(menu);
}
Timer timer = new Timer(5, new ActionListener(){
public void actionPerformed(ActionEvent e){
if(menu.checkGame() == true){
frame.remove(menu);
frame.add(new Level1());
}
}
});
timer.start();
在运行游戏的主类中,我使用这样的计时器检查checkGame方法是否等于true或false
public boolean checkGame(){
return startGame;
}
if(menu.checkGame() == false){
frame.add(menu);
}
Timer timer = new Timer(5, new ActionListener(){
public void actionPerformed(ActionEvent e){
if(menu.checkGame() == true){
frame.remove(menu);
frame.add(new Level1());
}
}
});
timer.start();
显然,这是行不通的,因为如果这样,我就不会问这个问题了。那么现在我的问题是,我如何使它像我想要的那样工作?在您的第二个代码片段中,计时器只运行一次任务。您可能希望一个ScheduledExecutorService
重复检查,例如:
final ScheduledExecutorService scheduledExecutor =
Executors.newSingleThreadScheduledExecutor();
scheduledExecutor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
if (menu.checkGame()) {
frame.remove(menu);
frame.add(new Level1());
scheduledExecutor.shutdown();
}
}
});
}
}, 5, 5, TimeUnit.MILLISECONDS);
为什么不让所有组件都运行,但在调用之前隐藏它们的可见性。您在计时器中的ActionListener
,为什么不将StartName按钮的ActionListener
设置为@kuporific?因为以后如果我这样做会更方便way@Tdorno“这不会让游戏运行得更慢吗?”MysticKiller98我会的,但你不会注意到的