我有一個JScrollPane環繞一個JPanel,它包含潛在的數百個顯示縮略圖圖像的JLabel(每個JLabel一個縮略圖)。出於記憶的原因,我不想構建所有的縮略圖。我只想爲可見的JLabel構建縮略圖,並在JLabel不可見時刪除縮略圖。當用戶滾動JPanel時,它們變得可見/不可見。我試圖通過像這樣使用ComponentListener來實現加載/卸載縮略圖:Java組件變得可見時的事件
addComponentListener(new ComponentAdapter() {
@Override
public void componentShown(ComponentEvent e) {
setIcon(new ImageIcon(getThumb()));
}
@Override
public void componentHidden(ComponentEvent e) {
setIcon(null);
}
});
但是這不起作用。 JLabels總是空的。我可以使用滾動事件並計算應該加載哪些縮略圖,但在此之前我想知道是否有更簡單的解決方案。
謝謝杜蘭達爾。你的方法非常好,但我也需要使用一個具有固定容量的隊列,這會排除舊圖標(這可能會變得不可見)。 – corneliu
@corneliu然後你可以讓你的隊列成爲一個LIFO隊列,首先提供最近的請求,並清除隊列另一端的標籤圖標。這樣一來,只有固定數量的縮略圖會同時存在。但爲了減少重新加載,只要可用內存允許,我可能還會使用SoftReference使用緩存來保留縮略圖。 – Durandal
再次感謝您。這正是我想到的那種隊列。我將調查SoftReference提示。聽起來很有希望。 – corneliu