切换帧
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,这是一个想法的要点。
以上是关于切换帧的主要内容,如果未能解决你的问题,请参考以下文章
自己定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,"掏粪男孩Gif"顺便再提提onWindowFocusChanged)(代码片段