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