我目前正在编写视频游戏。我使用Util.Timer来跟踪游戏的多个功能,但我的一个问题是尝试在背景图像之间进行更改。我试图让JPanel每秒更新到一个新图像,但到目前为止还没有运气。我使用JLabel在JPanel中显示图像。经过一秒钟后,我也调用了displayFrame()。所以现在我的问题是我如何能够每秒用新图像更新我的JPanel?这是我的代码:
public static void displayFrame(){
panel_1.setBounds(10, 11, 519, 614);
ImageIcon image = changeFrame();
JLabel label = new JLabel("", image, JLabel.CENTER);
panel_1.add(label, BorderLayout.CENTER);
frame.getContentPane().add(panel_1);
}
public static ImageIcon changeFrame(){
if(frameCounter == 9){
frameCounter = 1;
}
if(frameCounter == 1){
frameCounter = 2;
return new ImageIcon("Capture.PNG");
}
if(frameCounter == 2){
frameCounter = 3;
return new ImageIcon("Capture2.PNG");
}
if(frameCounter == 3){
frameCounter = 4;
return new ImageIcon("Capture3.PNG");
}
if(frameCounter == 4){
frameCounter = 5;
return new ImageIcon("Capture4.PNG");
}
if(frameCounter == 5){
frameCounter = 6;
return new ImageIcon("Capture5.PNG");
}
if(frameCounter == 6){
frameCounter = 7;
return new ImageIcon("Capture6.PNG");
}
if(frameCounter == 7){
frameCounter = 8;
return new ImageIcon("Capture7.PNG");
}
if(frameCounter == 8){
frameCounter = 9;
return new ImageIcon("Capture8.PNG");
}
if(frameCounter == 9){
frameCounter = 1;
return new ImageIcon("Capture9.PNG");
}
return new ImageIcon("Capture.PNG");
}
答案 0 :(得分:1)
我正在使用Util.Timer
不要使用Util.Timer。您应该使用Swing Timer来确保GUI的所有更新都在事件调度线程上完成。
然后当Timer触发时,您调用标签上的setIcon(...)
方法来更改实际的Icon。
不要使用多个“if语句”来控制显示哪个图像。如果你想拥有100个可以输入大量代码的图像,该怎么办?相反,我会将所有图像存储在ArrayList中。然后,您只需使用ArrayList的get(...)
方法,即可使用“frameCounter”变量获取要显示的图像。然后,在下次定时计时器时更新计数器。
另外,不要在班级中使用静态方法。我建议你阅读Swing教程。这里发布的示例向您展示了如何更好地构建类中的代码。