implementierung der graphik in emma301paint

10
08-GraphikImplementierung Implementierung der Graphik in EMMA301Paint

Upload: arissa

Post on 13-Jan-2016

17 views

Category:

Documents


1 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Implementierung der Graphik in EMMA301Paint

08-GraphikImplementierung

Implementierung der Graphik in EMMA301Paint

Page 2: 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 ObjekteEs 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 GraphikBeispiel: Erzeugen eines Linien-Objektes

Page 3: Implementierung der Graphik in EMMA301Paint

08-GraphikImplementierung 3

Einfügen in die GUIUm 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');

Page 4: Implementierung der Graphik in EMMA301Paint

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;

}

}

Page 5: Implementierung der Graphik in EMMA301Paint

08-GraphikImplementierung 5

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 bewegenbei jedem Punkt wird ein temporäres graphisches Objekt erzeugt, das als Linie angezeigt wird.

4. Am Endpunkt wird die Mouse-Taste losgelassenDie Koordinaten werden als Endpunkt (x2,y2) der Line gespeichert, es wird das Line-Objekt erzeugt und dem aktuellen EMMA301PaintFrame hizugefügt.

Page 6: Implementierung der Graphik in EMMA301Paint

08-GraphikImplementierung 6

1. Es ist keine Programmierung erforderlich2. Globale Variable für die Speicherung der Koordinaten

private int x1, y1, x2, y2;Methode zur Implementierung des MouseListenerspublic void mousePressed(MouseEvent e){ x1=e.getX(); y1=e.getY();}

3. 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; }}

Page 7: Implementierung der Graphik in EMMA301Paint

08-GraphikImplementierung 7

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

Page 8: Implementierung der Graphik in EMMA301Paint

08-GraphikImplementierung 8

Temporäre DarstellungBei der Eingabe der Daten müssen kontinuierlich die Zwischenergebnisse angezeigt werden. Diese muss schnell und präzise seines 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.

Page 9: Implementierung der Graphik in EMMA301Paint

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);}

Page 10: Implementierung der Graphik in EMMA301Paint

08-GraphikImplementierung 1

0

public void setTemporaryGraphicalObject

(GraphicalObject graphicalObject)

{

tempGraphic = graphicalObject;

getGlassPane().setVisible(true);

getGlassPane().repaint();

}

public void removeTemporaryGraphicalObject()

{

tempGraphic = null;

getGlassPane().setVisible(false);

}