所以我是摇摆不定的新手并且正在进行刽子手游戏。因此它应该工作的方式是用户提示欢迎消息,该消息将持续3秒,消失,然后将用户发送到下一帧。一切都很完美,除了当我运行它时,第一帧仍然是可见的并且在阴影中运行,即使它进入下一帧。我试图使用dispose方法,但它只是关闭框架而不进入下一个框架。 这是我到目前为止所做的事情
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.Timer;
public class PA1test extends JFrame{
public static void main(String[] args) {
// opens the first page
JFrame gui = new JFrame("Hangman");
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.add(new First_PageImage());
gui.pack();
gui.setVisible(true);
// action to open the second page
ActionListener taskPerformer = new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
//...Perform a task...
JFrame secpage = new JFrame("Hangman");
secpage.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
secpage.add(new SecondPage());
secpage.pack();
secpage.setVisible(true);
}
};
// set timer to perform action after 3 seconds
Timer timer = new Timer(3000 ,taskPerformer);
timer.setRepeats(false);
timer.start();
}
}
答案 0 :(得分:2)
几点:
JFrame.EXIT_ON_CLOSE
将退出整个应用程序。考虑使用JFrame.DISPOSE_ON_CLOSE
JFrame
或JDialog
而不是java的构建,请考虑将其设计为看起来像一个泼溅屏幕删除装饰(setUndecorated(true)
)和居中(setLocationRelativeTo(null);
)ActionListener
实现中完成 - 以便访问从匿名类中启动屏幕实例,您必须将其标记为final。 伪代码:
final JFrame splashScreen = new JFrame("Hangman");//mark as final for visibility's sake
splashScreen.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
ActionListener taskPerformer = new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
//logic to create the main UI frame here
splashScreen.dispose();
}
};
// set timer to perform action after 3 seconds
Timer timer = new Timer(3000 ,taskPerformer);
timer.setRepeats(false);
timer.start();
答案 1 :(得分:0)
在第一帧尝试.setVisible(false)。