预加载图像以用作JLabel图标

时间:2017-01-30 12:49:28

标签: java image swing jframe jslider

我想要一个简单的JFrame,其中JLabel(以图片形式显示图标)和JSlider(在40张图片之间切换)。

当我在滑块的StateChange事件上加载新图像时,程序变得非常慢,特别是当我快速滑动时。

所以我想要预加载40个图像并通过滑块替换它们。这是聪明的吗?

1 个答案:

答案 0 :(得分:2)

我认为,你有这样的事情:

public class MyClass {
    // other declarations
    private JLabel label;
    // other methods
    public void stateChange(ChangeEvent e) {
        label.setIcon(new ImageIcon(...)); // here is code to determine name of the icon to load.
                timer = null;
    }
}

您需要更改代码如下:

public class MyClass {
    // other declarations
    private JLabel label;
    private Timer timer; // javax.swing.Timer
    // other methods
    public void stateChange(ChangeEvent e) {
        if (timer != null) {
            timer.stop();
        }
        timer = new Timer(250, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                label.setIcon(new ImageIcon(...)); // here is code to determine name of the icon to load.
                timer = null;
            }
        });
        timer.setRepeats(false);
        timer.start();
    }
}