1 / 10

Implementierung der Graphik in EMMA301Paint

Implementierung der Graphik in EMMA301Paint. In EMMA301Paint sind nun wesentlich Funktionen implementiert: Fenster zum Zeichnen graphischer Objekte Graphische Objekte Darstellungsarten für graphische Objekte

arissa
Download Presentation

Implementierung der Graphik in EMMA301Paint

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Implementierung der Graphik in EMMA301Paint 08-GraphikImplementierung

  2. 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 08-GraphikImplementierung

  3. 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'); 08-GraphikImplementierung

  4. 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; } } 08-GraphikImplementierung

  5. Eingabe der Daten • Daten bestehen aus den Koordinaten des Anfangspunktes und des Endpunktes. • Welchen Algorithmus will man verwenden? • Mouse ohne gedrückte linker Taste zum Anfangspunkt der Linie bewegen. • Mouse-Taste drücken Koordinaten des Punktes werden als Anfangspunkt (x1, y1) gespeichert. • Mouse mit gedrückter linker Taste zum Endpunkt bewegenbei jedem Punkt wird ein temporäres graphisches Objekt erzeugt, das als Linie angezeigt wird. • 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. 08-GraphikImplementierung

  6. Es ist keine Programmierung erforderlich • Globale Variable für die Speicherung der Koordinatenprivate int x1, y1, x2, y2;Methode zur Implementierung des MouseListenerspublic void mousePressed(MouseEvent e){ x1=e.getX(); y1=e.getY();} • Methode zur Implementierung des MouseMotionListenerspublic 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;}} 08-GraphikImplementierung

  7. Methode zur Implementierung des MouseListenerspublic 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;}} 08-GraphikImplementierung

  8. 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 GraphicalObject‘s 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. 08-GraphikImplementierung

  9. 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); } 08-GraphikImplementierung

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

More Related