如何更改JLabel显示的图像?

时间:2014-07-02 18:49:00

标签: java swing timer jpanel jlabel

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

1 个答案:

答案 0 :(得分:1)

  

我正在使用Util.Timer

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

然后当Timer触发时,您调用标签上的setIcon(...)方法来更改实际的Icon。

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

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