so new in swing , working on hangman game. way supposed work user prompt welcome message last 3seconds, disappears, , sends user next frame. working except when run first frame still visible , running in shadow though goes next one. have tried use dispose method it's closing frame without going next one. here have done far
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 first page jframe gui = new jframe("hangman"); gui.setdefaultcloseoperation(jframe.exit_on_close); gui.add(new first_pageimage()); gui.pack(); gui.setvisible(true); // action open second page actionlistener taskperformer = new actionlistener() { @override public void actionperformed(actionevent evt) { //...perform task... jframe secpage = new jframe("hangman"); secpage.setdefaultcloseoperation(jframe.exit_on_close); secpage.add(new secondpage()); secpage.pack(); secpage.setvisible(true); } }; // set timer perform action after 3 seconds timer timer = new timer(3000 ,taskperformer); timer.setrepeats(false); timer.start(); }
}
a few points:
- setting dispose operation
jframe.exit_on_close
exit entire application. consider usingjframe.dispose_on_close
- sounds wish create splash screen - consider reading oracle's tutorial on using splashscreen class
- if intent splash screen , wish use
jframe
orjdialog
rather java's build in splashscreen (2), consider designing splash screen removing decorations (setundecorated(true)
) , centering (setlocationrelativeto(null);
) - in order dispose/hide initial jframe/splash, need after timer has fired, can done within timer's
actionlistener
implementation - in order access splash screen instance within anonymous class, must mark final.
pseudo-code:
final jframe splashscreen = new jframe("hangman");//mark final visibility's sake splashscreen.setdefaultcloseoperation(jframe.dispose_on_close); actionlistener taskperformer = new actionlistener() { @override public void actionperformed(actionevent evt) { //logic create main ui frame here splashscreen.dispose(); } }; // set timer perform action after 3 seconds timer timer = new timer(3000 ,taskperformer); timer.setrepeats(false); timer.start();
Comments
Post a Comment