ObsStoreView.java
import java.awt.*;
import store.*;
import obsstore.*;
import java.util.*;
public class ObsStoreView extends Canvas implements Observer {
ObservableStore store;
int i=0;
public ObsStoreView(ObservableStore s)
{store = s; s.addObserver(this);}
public STORE store() { return store; }
public void paint(Graphics g) {
Dimension extent = minimumSize();
PaintFun pf = new PaintFun(g);
g.drawRect(0,0,extent.width,extent.height);
g.translate(5,extent.height-5);
store.execute(pf);
g.translate(5,-(extent.height-5));
}
public Dimension minimumSize() {
DimensionFun f = new DimensionFun(getGraphics().getFontMetrics());
store.execute(f);
return new Dimension(f.width()+10,f.height()+10);
}
public Dimension preferredSize() {return minimumSize();}
public void update(Observable o, Object args) {
resize(preferredSize());
repaint();
}
public boolean mouseDown(Event e, int x, int y) {
if (e.metaDown()) store.remove();
else store.add(new Integer(i++));
return true;
}
}
class DimensionFun implements FUNCTION {
FontMetrics fm;
int width=0;
int height=0;
int deltaH;
DimensionFun(FontMetrics fm) {
this.fm = fm;
deltaH = fm.getMaxAscent() + fm.getMaxDescent();
}
public Object value(Object o) {
String s = ""+o;
width = Math.max(width,fm.stringWidth(s));
height += deltaH;
return s;
}
int width() { return width; }
int height() { return height; }
}
class PaintFun implements FUNCTION {
Graphics g;
int y = 0;
int deltaH, descent;
PaintFun(Graphics g) {
this.g = g;
FontMetrics fm = g.getFontMetrics();
deltaH = fm.getMaxAscent() + fm.getMaxDescent();
descent = fm.getMaxDescent();
}
public Object value(Object o) {
g.drawString(""+o,0,y-descent);
y -= deltaH;
return null;
}
}
On to ObsStoreSizeView.java Part of mvc
Hubert BaumeisterJune 21, 1997
Imprint | Data Protection