Java Swing JFrame在运行时使其他Jframe黯然失色

时间:2016-08-08 18:05:29

标签: java swing jframe

所以我是摇摆不定的新手并且正在进行刽子手游戏。因此它应该工作的方式是用户提示欢迎消息,该消息将持续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();     

}

}

2 个答案:

答案 0 :(得分:2)

几点:

  1. 将dispose操作设置为JFrame.EXIT_ON_CLOSE将退出整个应用程序。考虑使用JFrame.DISPOSE_ON_CLOSE
  2. 听起来你想创建一个闪屏 - 考虑阅读Oracle tutorial on using the SplashScreen class
  3. 如果你的意图是一个闪屏并且你希望在(2)的SplashScreen中使用JFrameJDialog而不是java的构建,请考虑将其设计为看起来像一个泼溅屏幕删除装饰(setUndecorated(true))和居中(setLocationRelativeTo(null);
  4. 为了处理/隐藏初始JFrame / splash,您需要在Timer触发后执行此操作,这可以在Timer的ActionListener实现中完成 - 以便访问从匿名类中启动屏幕实例,您必须将其标记为final。
  5. 伪代码:

    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)。