Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

08-GraphikImplementierung Implementierung der Graphik in EMMA301Paint.

Ähnliche Präsentationen


Präsentation zum Thema: "08-GraphikImplementierung Implementierung der Graphik in EMMA301Paint."—  Präsentation transkript:

1 08-GraphikImplementierung Implementierung der Graphik in EMMA301Paint

2 08-GraphikImplementierung2 In EMMA301Paint sind nun wesentlich Funktionen implementiert: Fenster zum Zeichnen graphischer Objekte Graphische Objekte Darstellungsarten für graphische Objekte Es fehlt noch die Möglichkeit graphische Objekte zu erzeugen und zu bearbeiten. Was muss implementiert werden: Auswahl welche Art Objekt erzeugt werden soll (Button, Menü, Popup- Menü) Eingabe der für diese Objekt nötigen Daten (Koordinateneingabe mit Hilfe der Mouse und Anzeige der Zwischenstände) Erzeugung des Objektes Zuordnung des Objektes zu einer Graphik Beispiel: Erzeugen eines Linien-Objektes

3 08-GraphikImplementierung3 Einfügen in die GUI Um verschiedene Objekte erzeugen zu können, wird eine globale Variable paintType eingerichtet, die die Information darüber aufnimmt: public static final int PAINT_NOTHING=0; public static final int PAINT_LINE=1; public static final int PAINT_RECTANGLE=2; public static final int PAINT_OVAL=3; public static final int PAINT_POLYLINE=4; public static final int PAINT_POLYGON=5; private int paintType = PAINT_NOTHING; Globale Action-Variable: private Action lineAction; lineAction = new Action(parent, 9, "Linie", "pictures/line.gif", "Zeichnen einer Linie", 'l');

4 08-GraphikImplementierung4 Einfügen in den Tools-Bar, das Menü und das Popup-Menü: toolsBar.add(createButton(lineAction)); toolsMenu.add(new JMenuItem(lineAction)); popupMenu.add(new JMenuItem(lineAction)); Auswertung der Actions: public void actionPerformed(ActionEvent e) { switch (typ) { case 9: paintType=PAINT_LINE; break; } }

5 08-GraphikImplementierung5 Eingabe der Daten Daten bestehen aus den Koordinaten des Anfangspunktes und des Endpunktes. Welchen Algorithmus will man verwenden? 1. Mouse ohne gedrückte linker Taste zum Anfangspunkt der Linie bewegen. 2. Mouse-Taste drücken Koordinaten des Punktes werden als Anfangspunkt (x1, y1) gespeichert. 3. Mouse mit gedrückter linker Taste zum Endpunkt bewegen bei jedem Punkt wird ein temporäres graphisches Objekt erzeugt, das als Linie angezeigt wird. 4. Am Endpunkt wird die Mouse-Taste losgelassen Die Koordinaten werden als Endpunkt (x2,y2) der Line gespeichert, es wird das Line- Objekt erzeugt und dem aktuellen EMMA301PaintFrame hizugefügt.

6 08-GraphikImplementierung6 1. Es ist keine Programmierung erforderlich 2. Globale Variable für die Speicherung der Koordinaten private int x1, y1, x2, y2; Methode zur Implementierung des MouseListeners public void mousePressed(MouseEvent e) { x1=e.getX(); y1=e.getY(); } 3. Methode zur Implementierung des MouseMotionListeners public void mouseDragged(MouseEvent e) { int x2=e.getX(); int y2=e.getY(); EMMA301PaintFrame selectedIF = (EMMA301PaintFrame)desktopPane.getSelectedFrame(); switch (paintType) { case PAINT_LINE: selectedIF.setTemporaryGraphicalObject( new Line(activeStroke, activeColor, x1, y1, x2, y2)); break; } }

7 08-GraphikImplementierung7 4. Methode zur Implementierung des MouseListeners public void mouseReleased(MouseEvent e) { x2=e.getX(); y2=e.getY(); EMMA301PaintFrame selectedIF = (EMMA301PaintFrame)desktopPane.getSelectedFrame(); switch (paintType) { case PAINT_LINE: selectedIF.addGraphicalObject(new Line (activeStroke, activeColor, x1, y1, x2, y2)); break; } }

8 08-GraphikImplementierung8 Temporäre Darstellung Bei der Eingabe der Daten müssen kontinuierlich die Zwischenergebnisse angezeigt werden. Diese muss schnell und präzise sein es werden die paintRaw-Methoden del GraphicalObjects verwendet. Wenn man diese Zwischenergebnisse kontinuierlich mit den schon definierten graphischen Objekte zusammen im selben Graphik-Kontext darstellen würde könnte das sehr langsam sein. Ausweg: die schon fertigen Objekte werden im Graphik-Kontext des ContentPane dargestellt und das temporäre Objekt im Graphik-Kontext der GlassPane.

9 08-GraphikImplementierung9 private GraphicalObject tempGraphic = null; setGlassPane(new JPanel() { { setOpaque(false); } public void paintComponent(Graphics g) { super.paintComponent(g); paintTempGraphics((Graphics2D)g); } }); public void paintTempGraphics (Graphics2D g) { if (tempGraphic!=null) tempGraphic.paintRaw(g); }

10 08-GraphikImplementierung10 public void setTemporaryGraphicalObject (GraphicalObject graphicalObject) { tempGraphic = graphicalObject; getGlassPane().setVisible(true); getGlassPane().repaint(); } public void removeTemporaryGraphicalObject() { tempGraphic = null; getGlassPane().setVisible(false); }


Herunterladen ppt "08-GraphikImplementierung Implementierung der Graphik in EMMA301Paint."

Ähnliche Präsentationen


Google-Anzeigen