1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| public class MyInternalFrame extends JInternalFrame {
public MyInternalFrame(SomeData data) {
...
}
}
public class MyFrameManager {
private static class CacheKey implements Comparable {
public SomeData data;
public long date;
public CacheKey(SomeData data) {
this.data = data;
this.date = System.currentTimeMillis();
}
public boolean equals(CacheKey o) {
return data.equals(o.data);
}
public void compareTo(CacheKey o) {
if(this.equals(o))
return 0;
else
return date - o.date
}
}
private Map<CacheKey, MyInternalFrame> cache = new TreeMap<CacheKey, MyInternalFrame>();
private int maxCacheSize;
public MyInternalFrame getFrame(SomeData data) {
CacheKey key = new CacheKey(data);
MyInternalFrame frame = cache.get(key);
if(frame == null)
frame = new MyInternalFrame(data);
cache.put(key, frame);
// si la frame y était on actualise la date
// sinon on crée une entrée
while(cache.size() >= maxCacheSize)
cache.remove(cache.lastKey());
} |
Partager