// veraenderte Version eines JDK Beispiels import java.awt.*; import java.applet.*; import java.util.Vector; public class DrawTest extends Applet { public void init() { setLayout(new BorderLayout()); DrawPanel dp = new DrawPanel(); add("Center", dp); add("South", new SKWahl(dp)); dp.init(); } public boolean handleEvent(Event e) { switch (e.id) { case Event.WINDOW_DESTROY: System.exit(0); return true; default: return false; } } public static void main(String args[]) { Frame f = new Frame("DrawTest"); DrawTest drawTest = new DrawTest(); drawTest.init(); drawTest.start(); f.add("Center", drawTest); f.resize(300, 300); f.show(); } } class DrawPanel extends Panel { Vector lines = new Vector(); Vector streckeOderKreis = new Vector(); int x1,y1; boolean ziehen; boolean strecke; int x2,y2; public void init() { ziehen = false; strecke = true; } public DrawPanel() { setBackground(Color.white); } public void setStrecke() { strecke = true; } public void setKreis() { strecke = false; } public boolean handleEvent(Event e) { switch (e.id) { case Event.MOUSE_DOWN: x1 = x2 = e.x; y1 = y2 = e.y; ziehen = true; return true; case Event.MOUSE_UP: lines.addElement(new Rectangle(x1, y1, e.x, e.y)); // leichter Missbrauch von rectangle streckeOderKreis.addElement(new Boolean(strecke)); ziehen = false; repaint(); return true; case Event.MOUSE_DRAG: x2 = e.x; y2 = e.y; repaint(); return true; case Event.WINDOW_DESTROY: System.exit(0); return true; default: return false; } } public void paint(Graphics g) { int np = lines.size(); /* Zeichne alle Strecken und Ellipsen */ for (int i=0; i < np; i++) { Rectangle p = (Rectangle)lines.elementAt(i); if (((Boolean) streckeOderKreis.elementAt(i)).booleanValue()) g.drawLine(p.x, p.y, p.width, p.height); else g.drawOval(p.x, p.y, p.width-p.x, p.height-p.y); } if (ziehen) { if (strecke) {g.drawLine(x1, y1, x2, y2);} else { g.drawOval(x1,y1,x2-x1,y2-y1); } } } } class SKWahl extends Panel { DrawPanel target; public SKWahl(DrawPanel target) { this.target = target; setLayout(new FlowLayout()); Choice SoderK = new Choice(); SoderK.addItem("Strecke"); SoderK.addItem("Ellipse"); SoderK.setBackground(Color.lightGray); add(SoderK); } public void paint(Graphics g) { Rectangle r = bounds(); g.setColor(Color.lightGray); g.draw3DRect(0, 0, r.width, r.height, false); } public boolean action(Event e, Object arg) { if (e.target instanceof Choice) { String choice = (String)arg; if (choice.equals("Strecke")) { target.setStrecke(); } else if (choice.equals("Ellipse")) { target.setKreis(); } } return true; } }