Ein Grafikprogramm


Dies Programm war das Semesterprojelt bei der Veranstaltung Systematisches Programmieren. Die Anforderungen waren: Sechs Zeichenobjekte zu implementieren. Zu diesen Objekten gehörten:

  • Punkte,
  • Linien,
  • Rechtecke und gefüllte Rechtecke,
  • Ovale und gefüllte Ovale.

Dies sollte als Applikation mit einer Menüauswahl geschrieben werden. Dieses Menü sollte die Funktionen Löschen, Speichern, Laden, Beenden, Rückgängig und verschiedene Farbauswahlen haben. Mein Programm hat noch die Zusatzfunktionen:

  • Verschieben,
  • Skalieren,
  • Löschen von einzelnen Objekten,
  • Dialogfenster beim Speichern und Laden,
  • ändern der Farbe

Programmcode

Die Zeichenobjekte

 Grafikeindim.java 
1 /** 2 * 3 * Die Zeichenobjekte für das Grafikprogramm 4 * 5 * @version 1.0 vom 27.05.02 6 * @ Xenia Rendtel 7 */ 8 9 import java.awt.*; 10 import java.awt.event.*; 11 import java.util.*; 12 import javax.swing.event.*; 13 import java.io.*; 14 import java.lang.*; 15 16 17 18 abstract class Grafikeindim implements Serializable{ 19 20 protected int x1, y1, x2, y2; 21 protected Color farbe; // die Variablem 22 protected Color ffarbe; 23 protected boolean ausgewaehlt = false; 24 25 26 public void SetzePos(int x1, int y1) { // Anfangsposition setzen 27 this.x1 = x1; 28 this.y1 = y1; 29 30 } 31 32 public void SetzePosrel(int x, int y) { //anfang auf x,y, Verhältnisse aber beibehalten 33 this.x2 = this.x2-this.x1+x; 34 this.y2 = this.y2-this.y1+y; 35 this.x1 = x; 36 this.y1 = y; 37 } 38 39 public void SetzePositionen(int x1, int y1, int x2, int y2) { 40 this.x1 = Math.min(x1, x2); 41 this.y1 = Math.min(y1, y2); 42 this.x2 = Math.max(x1, x2); 43 this.y2 = Math.max(y1, y2); 44 } 45 46 47 // die einzelnen Positionen 48 public int LeseX1() { 49 return x1; 50 } 51 52 public int LeseY1() { 53 return y1; 54 } 55 56 public int LeseX2() { 57 return x2; 58 } 59 60 public int LeseY2() { 61 return y2; 62 } 63 64 65 66 // Farben werden gesetzt 67 public void SetzeFarbe(Color farbe) { 68 this.farbe = farbe; 69 } 70 71 public Color LeseFarbe() { 72 return this.farbe; 73 } 74 75 76 77 public abstract void Zeichne(Graphics g); 78 public abstract boolean contains(Point p); 79 } 80 81 82 class Punkt extends Grafikeindim { 83 84 /* in der Zeichne Methode ist auch das zeichnen enthalten, 85 was man nutzt, wenn man etwas auswählt */ 86 public void Zeichne(Graphics g) { // Ein Punkt ist eine Linie ohne Ausdehnung 87 g.setColor(farbe); 88 g.drawLine(x1, y1, x1, y1); 89 if (ausgewaehlt == true) { 90 g.setColor(new Color(255,0,255)); 91 g.drawRect(x1-3, y1-3, 6, 6); // etwas größer, damit man was sieht 92 } 93 } 94 95 96 97 public boolean contains(Point p) { 98 return (new Rectangle(x1-1, y1-1, 3, 3).contains(p)); 99 } 100 } 101 102 103 104 105 abstract class Grafikzweidim extends Grafikeindim { 106 107 protected Color ffarbe; 108 109 110 111 public void SetzePositionen(int x1, int y1, int x2, int y2) { 112 this.x1 = Math.min(x1, x2); 113 this.y1 = Math.min(y1, y2); 114 this.x2 = Math.max(x1, x2); 115 this.y2 = Math.max(y1, y2); 116 } 117 118 119 120 121 122 public void Zeichne(Graphics g) { 123 if (ausgewaehlt == true) { 124 g.setColor(new Color(255,0,255)); 125 g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), 126 Math.abs(y1 - y2)); 127 } 128 } 129 130 public boolean contains(Point p) { 131 return (new Rectangle(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), 132 Math.abs(y1 - y2)).contains(p)); 133 } 134 135 136 } 137 138 interface Voll { 139 public abstract void SetzeFuellfarbe(Color ffarbe); 140 public abstract Color LeseFuellfarbe(); 141 } 142 143 144 145 146 class Strecke extends Grafikzweidim { 147 148 public void Zeichne(Graphics g) { 149 if (ausgewaehlt == true) { 150 g.setColor(new Color(255,0,255)); 151 g.drawLine(x1+2, y1, x2 +2, y2); 152 g.drawLine(x1-2, y1, x2 -2, y2); 153 g.drawLine(x1-2, y1, x1 +2, y1); 154 g.drawLine(x2-2, y2, x2 +2, y2); 155 } 156 g.setColor(farbe); 157 g.drawLine(x1, y1, x2, y2); 158 } 159 160 161 public boolean contains(Point p) { 162 return (new Rectangle(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), 163 Math.abs(y1 - y2)).contains(p)); 164 } 165 public void SetzePositionen(int x1, int y1, int x2, int y2) { 166 this.x1 = x1; 167 this.y1 = y1; 168 this.x2 = x2; 169 this.y2 = y2; 170 } 171 } 172 173 174 class Rechteck extends Grafikzweidim { 175 176 /* es werden hier die Anfangs und Endpositionen angegeben und nicht 177 Höhe und Breite, da man dies später dann als die Mauspositionen 178 übergeben kann 179 Es gibt hier wie bei Störe meine Kreisenicht vier Fälle, wo die zweite Position 180 liegen kann, diese werden im folgenden abgearbeitet. 181 */ 182 183 public void Zeichne(Graphics g) { 184 if (ausgewaehlt == true) { 185 g.setColor(new Color(255,0,255)); 186 g.drawRect(x1-2, y1-2, x2 - x1+4, y2 - y1+4); 187 } 188 g.setColor(farbe); 189 g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), 190 Math.abs(y1 - y2)); 191 } 192 193 194 195 196 } 197 198 199 200 class Rechteckgef extends Rechteck implements Voll { 201 202 public void Zeichne(Graphics g) { 203 if (ausgewaehlt == true) { 204 g.setColor(new Color(255,0,255)); 205 g.drawRect(x1-2, y1-2, x2 - x1+4, y2 - y1+4); 206 } 207 g.setColor(ffarbe); 208 g.fillRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), 209 Math.abs(y1 - y2)); 210 g.setColor(farbe); 211 g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), 212 Math.abs(y1 - y2)); 213 214 } 215 216 217 //Setzen der Füllfarbe 218 public void SetzeFuellfarbe(Color ffarbe) { 219 this.ffarbe = ffarbe; 220 } 221 222 public Color LeseFuellfarbe() { 223 return this.ffarbe; 224 } 225 226 } 227 228 229 class Oval extends Grafikzweidim { 230 231 public void Zeichne(Graphics g) { 232 if (ausgewaehlt == true) { 233 g.setColor(new Color(255,0,255)); 234 g.drawOval(x1-2, y1-2, x2 - x1+4, y2 - y1+4); 235 } 236 g.setColor(farbe); 237 g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), 238 Math.abs(y1 - y2)); 239 240 } 241 242 243 244 } 245 246 247 class Ovalgef extends Oval implements Voll { 248 249 public void Zeichne(Graphics g) { 250 if (ausgewaehlt == true) { 251 g.setColor(new Color(255,0,255)); 252 g.drawOval(x1-2, y1-2, x2 - x1+4, y2 - y1+4); 253 } 254 g.setColor(ffarbe); 255 g.fillOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), 256 Math.abs(y1 - y2)); 257 g.setColor(farbe); 258 g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), 259 Math.abs(y1 - y2)); 260 261 } 262 263 //Setzen der Füllfarbe 264 public void SetzeFuellfarbe(Color ffarbe) { 265 this.ffarbe = ffarbe; 266 } 267 268 269 public Color LeseFuellfarbe() { 270 return this.ffarbe; 271 } 272 273 274 public boolean contains(Point p) { 275 return (new Rectangle(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), 276 Math.abs(y1 - y2)).contains(p)); 277 } 278 279 280 } 281 282 283

Was passiert bei Menüauswahl?

 Aktionen.java 
1 /** 2 * 3 * <Unterdatei des Malprogramms, zuständig für die Button und Menüereignisse> 4 * 5 * @version 1.0 vom 04.06.02 6 * @author Xenia Rendtel 7 */ 8 9 10 11 12 13 import java.awt.*; 14 import java.awt.event.*; 15 import java.util.*; 16 import javax.swing.event.*; 17 import java.io.*; 18 import java.lang.*; 19 20 public class Aktionen extends MouseInputAdapter implements ActionListener{ 21 22 private Fenster programm; 23 Grafikeindim figur; 24 25 public Aktionen(Fenster programm) { 26 this.programm = programm; 27 28 } 29 30 31 public void actionPerformed(ActionEvent e) { 32 33 String cmd = e.getActionCommand(); 34 try{ 35 int i; 36 for (i = 0 ; i < 28; i++) { 37 if (programm.befehle[i].equals(cmd)) break; 38 } 39 switch(i) { 40 case 0 : programm.Neu(); 41 break; 42 case 1 : programm.Oeffnen(); 43 break; 44 case 2 : programm.Speichern(); 45 break; 46 case 3 : System.exit(0); 47 break; 48 case 4 : programm.Rueckgaengig(); 49 programm.SchreibeRueckgaengig(); 50 break; 51 case 5 : programm.SchreibeRueckgaengig(); 52 programm.verschieben=true; 53 break; 54 case 6 : programm.SchreibeRueckgaengig(); 55 programm.Loeschen(); 56 break; 57 case 7 : programm.objektauswahl = Class.forName("Punkt"); 58 programm.SchreibeRueckgaengig(); 59 break; 60 case 8 : programm.objektauswahl = Class.forName("Strecke"); 61 programm.SchreibeRueckgaengig(); 62 break; 63 case 9 : programm.objektauswahl = Class.forName("Rechteck"); 64 programm.SchreibeRueckgaengig(); 65 break; 66 case 10 : programm.objektauswahl = Class.forName("Oval"); 67 programm.SchreibeRueckgaengig(); 68 break; 69 case 11 : programm.objektauswahl = Class.forName("Rechteckgef"); 70 programm.SchreibeRueckgaengig(); 71 break; 72 case 12 : programm.objektauswahl = Class.forName("Ovalgef"); 73 programm.SchreibeRueckgaengig(); 74 break; 75 case 13 : programm.SchreibeRueckgaengig(); 76 programm.SetzeFarbe(programm.farben[i-13]); 77 break; 78 case 14 : programm.SchreibeRueckgaengig(); 79 programm.SetzeFarbe(programm.farben[i-13]); 80 break; 81 case 15 : programm.SetzeFarbe(programm.farben[i-13]); 82 programm.SchreibeRueckgaengig(); 83 break; 84 case 16 : programm.SchreibeRueckgaengig(); 85 programm.SetzeFarbe(programm.farben[i-13]); 86 break; 87 case 17 : programm.SchreibeRueckgaengig(); 88 programm.SetzeFarbe(programm.farben[i-13]); 89 break; 90 case 18 : programm.SchreibeRueckgaengig(); 91 programm.SetzeFarbe(programm.farben[i-13]); 92 break; 93 case 19 : programm.SchreibeRueckgaengig(); 94 programm.SetzeFuellfarbe(programm.ffarben[i-19]); 95 break; 96 case 20 : programm.SchreibeRueckgaengig(); 97 programm.SetzeFuellfarbe(programm.ffarben[i-19]); 98 break; 99 case 21 : programm.SetzeFuellfarbe(programm.ffarben[i-19]); 100 programm.SchreibeRueckgaengig(); 101 break; 102 case 22 : programm.SchreibeRueckgaengig(); 103 programm.SetzeFuellfarbe(programm.ffarben[i-19]); 104 break; 105 case 23 : programm.SchreibeRueckgaengig(); 106 programm.SetzeFuellfarbe(programm.ffarben[i-19]); 107 break; 108 case 24 : programm.SchreibeRueckgaengig(); 109 programm.SetzeFuellfarbe(programm.ffarben[i-19]); 110 break; 111 case 25 : programm.SchreibeRueckgaengig(); 112 programm.Vorne(); 113 break; 114 case 26 : programm.SchreibeRueckgaengig(); 115 programm.Hinten(); 116 break; 117 case 27 : programm.Info(); 118 break; 119 120 default : break; 121 } 122 } 123 catch (Exception err) { 124 } 125 126 127 if (programm.figur != null) { 128 programm.SchreibeRueckgaengig(); 129 } 130 131 132 } 133 134 135 136 137 138 139 140 } 141

Das Hauptprogramm

 Fenster.java 
1 /** 2 * 3 * Das Hauptprogramm 4 * 5 * @version 1.0 vom 03.06.02 6 * @author Xenia Rendtel 7 */ 8 9 10 import java.awt.*; 11 import java.awt.event.*; 12 import java.util.*; 13 import java.io.*; 14 import java.lang.*; 15 16 public class Fenster extends Canvas { 17 18 public Color farbe, ffarbe; 19 public Vector elemente = new Vector(); 20 public Class objektauswahl; 21 public final String[] figuren = {"Punkt", "Strecke", "Rechteck", "Oval", "Rechteckgef", "Ovalgef"}; 22 public final String[] befehle = {"Neu", "Oeffnen", "Speichern", "Beenden", 23 "Rueckgaengig", "Verschieben", "Loeschen", 24 "Punkt", "Linie", "Rechteck", "Oval", "Rechteck gefuellt", 25 "Oval gefuellt", 26 "Rot", "Blau", "Gruen", "Gelb", "Schwarz", "Weiss", 27 "Rotgef", "Blaugef", "Gruengef", "Gelbgef", "Schwarzgef", "Weissgef", 28 "Nach Oben", "Nach Unten", 29 "Info"}; 30 31 public static Color[] farben = {Color.red, Color.blue, Color.green, Color.yellow, Color.black, Color.white}; 32 public static Color[] ffarben = {Color.red, Color.blue, Color.green, Color.yellow, Color.black, Color.white}; 33 34 Grafikeindim figur; 35 public Grafikeindim ersatz; 36 public boolean anfang = true; 37 public boolean verschieben = false; 38 private ByteArrayOutputStream puffer = new ByteArrayOutputStream(); 39 public int x1, x2, y1, y2; 40 41 42 public Fenster() { 43 this.addMouseListener(new MausListener()); 44 this.addMouseMotionListener(new MausMotionListener()); 45 farbe = Color.black; 46 ffarbe = Color.red; 47 } 48 49 public static void main (String args[]) { 50 51 52 Fenster canvas = new Fenster(); 53 Aktionen reaktion = new Aktionen(canvas); 54 55 56 57 58 Frame fenster = new Frame("Ein Grafikprogramm"); 59 fenster.addWindowListener(new WindowAdapter() { 60 public void windowClosing(WindowEvent e) { 61 System.exit(0); 62 } 63 }); 64 65 66 fenster.setSize(600,600); 67 68 // ein Panel erzeugen 69 Panel panel = new Panel(); 70 panel.setLayout(new FlowLayout(FlowLayout.LEFT)); 71 72 // das Menü 73 MenuBar mb = new MenuBar(); // die Menüpunkte werden angelegt 74 75 Menu m1 = new Menu("Datei"); 76 for (int i = 0; i <= 2; i++) { 77 canvas.Menueeintrag(m1, canvas.befehle[i], reaktion); 78 } 79 m1.addSeparator(); 80 canvas.Menueeintrag(m1, canvas.befehle[3], reaktion); 81 82 Menu m2 = new Menu("Bearbeiten"); 83 for (int i = 4; i <= 5; i++) { 84 canvas.Menueeintrag(m2, canvas.befehle[i], reaktion); 85 } 86 m2.addSeparator(); 87 canvas.Menueeintrag(m2, canvas.befehle[6], reaktion); 88 89 Menu m3 = new Menu("Form"); 90 for (int i = 7; i <= 12; i++) { 91 canvas.Menueeintrag(m3, canvas.befehle[i], reaktion); 92 } 93 94 Menu m4 = new Menu("Farben"); 95 Menu submenu1 = new Menu("Malfarbe"); 96 for (int i = 13; i <= 18; i++) { 97 canvas.Menueeintrag(submenu1, canvas.befehle[i], reaktion); 98 } 99 Menu submenu2 = new Menu("Fuellfarbe"); 100 for (int i = 19; i <= 24; i++) { 101 canvas.Menueeintrag(submenu2, canvas.befehle[i], reaktion); 102 } 103 104 105 Menu m5 = new Menu("Anordnung"); 106 for (int i = 25; i<=26; i++) { 107 canvas.Menueeintrag(m5, canvas.befehle[i], reaktion); 108 } 109 110 Menu m6 = new Menu("Hilfe"); 111 canvas.Menueeintrag(m6, canvas.befehle[27], reaktion); 112 113 mb.add(m1); 114 mb.add(m2); 115 mb.add(m3); 116 mb.add(m4); 117 m4.add(submenu1); 118 m4.add(submenu2); 119 mb.add(m4); 120 mb.add(m5); 121 mb.add(m6); 122 123 124 fenster.setMenuBar(mb); 125 126 127 128 //der Listener 129 canvas.addMouseListener(new Aktionen(canvas)); 130 131 132 // ein Panel erzeugen 133 for (int i = 7; i <= 12; i++) { 134 canvas.Buttoneintrag(panel, canvas.befehle[i], reaktion); 135 } 136 137 138 139 fenster.setLayout(new BorderLayout()); 140 fenster.add("South", panel); 141 fenster.add("Center", canvas); 142 fenster.show(); 143 144 145 } 146 147 148 public void paint(Graphics g) { 149 try{ 150 Enumeration i = elemente.elements(); 151 while (i.hasMoreElements()) { 152 ((Grafikeindim)i.nextElement()).Zeichne(g); 153 } 154 } 155 catch (Exception err) {} 156 try{ 157 ersatz.Zeichne(g); 158 /* die Ersatz Figur wird gezeichnet, 159 damit man Veränerungen sihet */ 160 161 } 162 catch (Exception err) { 163 } 164 } 165 166 167 public void SetzeFuellfarbe(Color fuellfarbe) { 168 ffarbe = fuellfarbe; 169 if (figur instanceof Voll) { 170 ((Voll)figur).SetzeFuellfarbe(ffarbe); 171 } 172 } 173 174 175 176 public void SetzeFarbe(Color malfarbe) { // die Farbe wird gesetzt 177 farbe = malfarbe; 178 figur.SetzeFarbe(farbe); 179 } 180 181 182 183 public void Neu() { 184 deselect(); 185 elemente = new Vector(); 186 deselect(); 187 repaint(); 188 } 189 190 public void Speichern() { /* in eine Datei wird geschrieben, 191 da es sich nicht nur um TExt handelt 192 wird ObjectOutputStream genutzt, 193 damit man die Rohdaten speichert 194 siehe: 195 http://java.sun.com/j2se/1.4/docs/api/java/io/ObjectOutputStream.html 196 */ 197 Frame speicher = new Frame(); 198 FileDialog speicherdialog = new FileDialog(speicher, "Datei speichern", FileDialog.SAVE); 199 speicherdialog.show(); 200 if (speicherdialog.getFile() != null) { 201 try { 202 FileOutputStream out = new FileOutputStream(speicherdialog.getDirectory()+speicherdialog.getFile()); 203 SchreibeBild(out); 204 } 205 catch(FileNotFoundException err) { 206 } 207 catch (IOException err) { 208 } 209 } 210 } 211 212 public void SchreibeBild(OutputStream os) { 213 try { 214 ObjectOutputStream ous = new ObjectOutputStream(os); 215 ous.writeObject(elemente); 216 } 217 catch (Exception err) { 218 } 219 } 220 221 public void Oeffnen() { 222 Frame oeffnen = new Frame(); 223 FileDialog oeffnendialog = new FileDialog(oeffnen, "Datei oeffnen", FileDialog.LOAD); 224 oeffnendialog.show(); 225 if (oeffnendialog.getFile() != null) { 226 227 try { 228 FileInputStream in = new FileInputStream(oeffnendialog.getDirectory()+oeffnendialog.getFile()); 229 LeseBild(in); 230 } 231 catch (Exception err) { 232 } 233 } 234 } 235 236 public void LeseBild(InputStream is) { 237 try { 238 ObjectInputStream ois = new ObjectInputStream(is); 239 elemente = (Vector)ois.readObject(); 240 deselect(); 241 repaint(); 242 } 243 catch (Exception err) { 244 } 245 } 246 247 248 public void deselect() { /* ein markiertes Objekt soll aus dem 249 markierten Bereich heraus. 250 */ 251 252 Enumeration i = elemente.elements(); 253 while (i.hasMoreElements() == true) { 254 ((Grafikeindim)i.nextElement()).ausgewaehlt = false; 255 } 256 figur = null; 257 ersatz = null; 258 } 259 260 261 262 263 public void select(Point p) { //auswahl eines Punktes 264 deselect(); 265 Grafikeindim ersatz; 266 for (int i = elemente.size() -1; i >= 0; i--) { /* es wird der Vektor 267 von hinten durchschaut, ob 268 das Objekt enthalten ist 269 */ 270 271 ersatz = (Grafikeindim)elemente.elementAt(i); 272 if (ersatz.contains(p) == true) { 273 figur = ersatz; 274 ersatz.ausgewaehlt = true; 275 break; /* wenn der Punkt 276 gefunden wurde 277 wird die for-Schleife 278 beendet. 279 */ 280 281 } 282 283 } 284 repaint(); 285 } 286 287 288 public void SchreibeRueckgaengig() { 289 puffer = new ByteArrayOutputStream(); 290 SchreibeBild(puffer); 291 } 292 293 294 public void Rueckgaengig() { 295 ByteArrayInputStream pufferin = new ByteArrayInputStream(puffer.toByteArray()); 296 LeseBild(pufferin); 297 } 298 299 300 public void Loeschen() { 301 if (figur != null) { 302 elemente.remove(figur); 303 figur = null; 304 repaint(); 305 } 306 307 308 } 309 310 311 public void Vorne() { /* Objekt nach hinten in den Vector packen */ 312 if (figur != null) { 313 elemente.remove(figur); 314 elemente.add(figur); 315 repaint(); 316 deselect(); 317 318 } 319 } 320 321 public void Hinten() { /* Objekt nach voorne in den Vektor packeb */ 322 if (figur != null) { 323 elemente.remove(figur); 324 elemente.add(0, figur); 325 repaint(); 326 deselect(); 327 } 328 329 } 330 331 public void Info() { 332 333 getGraphics().setColor(new Color(0,0,0)); 334 getGraphics().setFont(new Font(null, 0, 12)); 335 getGraphics().drawString("Dieses Programm ist von Xenia (-:", 10,10); 336 337 } 338 339 340 341 342 343 344 // erleichtert die Arbeit 345 public void Menueeintrag(Menu m, String eintrag, Aktionen wo) { // ein Menü wird angelegt 346 347 MenuItem item = new MenuItem(eintrag); 348 item.setActionCommand(eintrag); 349 item.addActionListener(wo); 350 m.add(item); 351 352 } 353 354 public void Buttoneintrag(Panel p, String eintrag, Aktionen wo) { //definiert die Buttons 355 356 Button button = new Button(eintrag); 357 button.setActionCommand(eintrag); 358 button.addActionListener(wo); 359 p.add(button); 360 361 } 362 363 364 365 366 /* ............................. */ 367 // hier kommt die Maus (wo ist der Elefant?)... 368 /* ............................. */ 369 370 371 class MausListener extends MouseAdapter { 372 373 public void mouseReleased(MouseEvent e) { 374 anfang = true; 375 verschieben = false; 376 } 377 public void mouseClicked(MouseEvent e) { 378 select(e.getPoint()); 379 try { 380 if ((figur == null) && objektauswahl.getName().equals("Punkt")) { 381 SchreibeRueckgaengig(); 382 try { 383 figur = new Punkt(); 384 figur.SetzeFarbe(farbe); 385 figur.SetzePos(e.getX(),e.getY()); 386 figur.Zeichne(getGraphics()); 387 elemente.add(figur); 388 } 389 catch (Exception err) {} 390 } 391 } 392 catch (Exception err) { 393 } 394 395 396 } 397 398 } 399 400 401 class MausMotionListener extends MouseMotionAdapter { 402 403 public void mouseDragged(MouseEvent e) { 404 if (figur != null) { /* es gibt schon eine Figur, deren Anfang übernommen wird */ 405 if (anfang == true) { 406 x1 = figur.x1; 407 y1 = figur.y1; 408 anfang = false; 409 } 410 else { 411 if (verschieben == true) { /* Objekt verschieben */ 412 figur.SetzePosrel(e.getX(), e.getY()); 413 figur.SetzeFarbe(farbe); 414 if (figur instanceof Voll) 415 ((Voll)figur).SetzeFuellfarbe(ffarbe); 416 figur.Zeichne(getGraphics()); 417 418 419 } 420 else { /* Skalieren */ 421 figur.SetzePositionen(x1,y1,e.getX(),e.getY()); 422 figur.SetzeFarbe(farbe); 423 if (figur instanceof Voll) 424 ((Voll)figur).SetzeFuellfarbe(ffarbe); 425 figur.Zeichne(getGraphics()); 426 427 } 428 } 429 } 430 else { 431 if (anfang == true) { 432 x1 = e.getX(); 433 y1 = e.getY(); 434 try { 435 SchreibeRueckgaengig(); 436 ersatz = (Grafikeindim)objektauswahl.newInstance(); 437 ersatz.SetzePositionen(x1, y1, e.getX(), e.getY()); 438 if (ersatz instanceof Grafikzweidim) 439 ((Grafikzweidim)ersatz).SetzePositionen(x1, y1, e.getX(), e.getY()); 440 ersatz.SetzeFarbe(farbe); 441 if (ersatz instanceof Voll) 442 ((Voll)ersatz).SetzeFuellfarbe(ffarbe); 443 elemente.add(ersatz); 444 } 445 catch (Exception ex) { 446 } 447 anfang = false; 448 } 449 else { 450 if (ersatz instanceof Grafikzweidim) { 451 ((Grafikzweidim)ersatz).SetzePositionen(x1, y1, e.getX(), e.getY()); 452 } 453 } 454 } 455 repaint(); 456 } 457 } 458 459 } 460

Letzte Änderung: 22.08.2009: 11:57:30 von X. Rendtel