gpt4 book ai didi

java - 如何更改 JLabel 显示的图像?

转载 作者:行者123 更新时间:2023-12-01 12:47:35 24 4
gpt4 key购买 nike

我目前正在编写一款视频游戏。我正在使用 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");
}

最佳答案

I'm using Util.Timer

不要使用Util.Timer。您应该使用 Swing Timer确保对 GUI 的所有更新都在事件调度线程上完成。

然后,当计时器触发时,您可以调用标签上的 setIcon(...) 方法来更改实际图标。

不要使用多个“if 语句”来控制显示哪个图像。如果您想要 100 张图像,那么需要输入大量代码怎么办?相反,我会将所有图像存储在 ArrayList 中。然后,您只需使用 ArrayList 的 get(...) 方法即可使用“frameCounter”变量获取要显示的图像。然后,您可以在下次计时器触发时更新计数器。

此外,不要在类中使用静态方法。我建议您阅读 Swing 教程。那里发布的示例向您展示了如何更好地构建类中的代码。

关于java - 如何更改 JLabel 显示的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24538821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com