切换帧

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了切换帧相关的知识,希望对你有一定的参考价值。

我试图通过一个按钮从一个帧切换到另一个帧。这是我的第一个框架代码:

JFrame f = new JFrame();
    f.setSize(width,height);
    f.setResizable(false);
    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Icon play = new ImageIcon(getClass().getResource("play.png"));
    startB = new JButton(play);
    startB.setBounds(105,350,100,35);
    startB.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            f.dispose();
            MainProgram mp = new MainProgram();
            mp.run();

        }
    });

和MainProgram:

//run method
            public void run() {
                init();
                gameLoop();
            }

//init method
public void init() {
    s = new screen();
    rand = new Random();
    upPipes = new ArrayList<Rectangle>();
    downPipes = new ArrayList<Rectangle>();

    DisplayMode dm = s.compareDisplayModes(modes);
    s.setFullScreen(dm);

    Window w = s.getFullScreenWindow();
    w.setFont(new Font("Calibri", Font.PLAIN, 50));
    w.setForeground(Color.PINK);
    w.addKeyListener(this);
    w.setFocusable(true);

    loadPics();
    running = true;
}

但是当MainProgram的框架在屏幕上时,即使我已经添加了键监听器,它也不会听我的键盘。那是因为第一帧只处理但未关闭?无论如何要关闭它或使我的框架听我的键盘?

答案

首先,替换这个:

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

你试图稍后摆脱框架,这将使你的应用程序退出。 (这就是关闭的退出方式。)

接下来,替换

f.dispose();

f.setVisible(false);

这将关闭窗口,它将被处理掉。

下一步是让你的窗口工作。我不认为你得到任何关键事件的真正原因是因为下一个问题,但你可以添加。

w.setFocusable(true);
w.requestFocus();

这样你的窗口就会有焦点。

最后,我认为真正的问题是你的run方法。听起来你的游戏循环正在EDT上运行。您可以尝试这个来开始一个新的线程。

public void run() {
    init();

    new Thread( ()-> gameLoop()).start();
}

这应该让你的应用程序运行,这是一个黑客,你应该创建一个SwingWorker,这是一个想法的要点。

以上是关于切换帧的主要内容,如果未能解决你的问题,请参考以下文章

如何在切换片段时停止 AsyncTask?

自己定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,&quot;掏粪男孩Gif&quot;顺便再提提onWindowFocusChanged)(代码片段

如何在 Kotlin 片段内的按钮之间切换片段?

切换片段时如何维护子视图的状态?

如何在使用selenium python切换帧时获得完整的html代码?

切换帧