0
我想要一個簡單的JFrame
與JLabel
(顯示圖像作爲圖標)和JSlider
(切換40個圖像)。預加載圖像用作JLabel圖標
當我在滑塊的StateChange
事件上加載新圖像時,程序變得非常慢,特別是當我滑動快時。
所以我正在考慮預載40個圖像,並通過滑塊替換它們。這是否智能和可能?
我想要一個簡單的JFrame
與JLabel
(顯示圖像作爲圖標)和JSlider
(切換40個圖像)。預加載圖像用作JLabel圖標
當我在滑塊的StateChange
事件上加載新圖像時,程序變得非常慢,特別是當我滑動快時。
所以我正在考慮預載40個圖像,並通過滑塊替換它們。這是否智能和可能?
我認爲,你有這樣的事情:
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();
}
}
是的,它是可能的。在這個階段,我們無法幫助您解決具體問題,因爲您沒有提供任何信息。爲什麼不簡單地先嚐試一下呢?如果你不知道,我們怎麼知道你可能會遇到什麼問題? –
查看'java.awt.MediaTracker'類和'ImageIcon'也使用'MediaTracker',如果我沒有錯 - 所以預加載圖像非常簡單 –
不要直接在事件監聽器中加載圖標。改爲使用'javax.swing.Timer'。因此,您可以避免在用戶快速滑動時簡單加載不需要的圖像(只需取消舊計時器並開始新計時器)。 –