1DVG3 - Paint Teil 2 Paint Teil2. DVG3 - Paint Teil 2 2 Weitere Entwicklungen Hinzufügen verschiedener Werkzeuge: Punkte Linien Rechtecke, Rechtecke mit.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Anwendungen des OODM auf die ADB / NDB
Kurt Rosenberg. C# für.NET oder.NET für C# is(C# == C++ && Java)? true : false ; reines C# Ausblick Überblick.
Agenda Sitzung 2 für den Programmaufbau
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik F Verteilte Software - Java.
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Verteilte Software - Java - Prozedurale Programmierung 1
Design by Contract with JML - Teil 2
Grundlagen der Programmierung (GP) Prof. Dr. H. Schlingloff Joachim Hänsel
Binäre Bäume Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
AUFGABE 1: Ein Wagen (dargestellt durch ein Rechteck) soll sich von links nach rechts bewegen. Tipp: Timer benutzen AUFGABE 2: Zusätzlich zu Aufgabe.
Grafische Benutzeroberfläche
Ein Beispiel in Java.
Softwaretechnologie II WS 08/09 SpieleProgrammieren UlTris V07 Reihen vorbelegen, Spielfeld anzeigen und Punktestand ausrechnen Sibylle C. Schellhorn,
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 9 IO – Streams in Java Sommersemester 2003 Lars Bernard.
Sommersemester 2003 Lars Bernard
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 8 Sitzung 8: Zeichnen in Java.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 7 User Interfaces in Java Sommersemester 2003 Lars Bernard.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit.
Java-Kurs Grafik Julian Drerup.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Zusammenfassung Vorwoche
1DVG3 - Eventbehandlung Eventbehandlung. DVG3 - Eventbehandlung 2 Events Events sind externe Ereignisse, die parallel zum normalen Programmablauf auftreten.
Vortrag - Kenny Schlör Applets Einführung in die Appletprogrammierung.
1DVG3 - eigene AWT-Komponenten Entwicklung eigener AWT-Komponenten.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
1DVG3 - anonyme Klassen Anonyme Klassen. DVG3 - anonyme Klassen 2 Syntax new BasisKlasse(Parameterliste) { Modifikationen und Erweiterungen der Basisklasse.
UNDO & SELECT Vortrag : Martin Hiersche
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
08-GraphikImplementierung Implementierung der Graphik in EMMA301Paint.
04 - Actions Actions Actions 2 Motivation In verschiedenen Swing-Komponenten werden ausgelöste Aktionen durch ActionListener behandelt. Häufig werden.
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
06-EMMA-GUI Das EMMA-GUI. 06-EMMA-GUI 2 Aufteilung des Bildes (Applikation) Menü - Balken Dateiwerkzeuge Zeichenwerkzeuge Meldungen, Informationen, Fehler.
© 2005 Pohlig – Taulien: Eine GUI für die Klasse Mathematik Kurs: Come Together 1 April 2005 Eine GUI für die Klasse Mathematik.
3D Programmierung Version 12 - Highscores. Die vom Spieler erzielte Punktzahl wird mit 5 vorgegebenen Punktzahlen verglichen und, falls nötig, in die.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 7 Sitzung 7: User Interfaces in Java.
Objektorientierte Modellierung
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
Java Performance Tuning Performance Tuning is similar to playing a strategy game but happily you usually get paid for it.
Einführung in das Programm
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Informatik – Programmierpraktikum Alexander Volodarski Gruppe 14
Abteilung für Telekooperation Übung Softwareentwicklung 2 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Equals, Hashcode und CompareTo Micha Kessler
Java-AG Benutzeroberflächen Juni 2001 Michael Haas.
EPROG Tutorium #3 Philipp Effenberger
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
Learning By Doing Ereignissteuerung (Events) prozedural ereignisgesteuert Unterprogrammaufruf an fest codierter Stelle Wann immer der Event auftritt, führe.
Learning By Doing Konstruktoren Gleicher Name wie die Klasse Zur Initialisierung des Objekts, insbesondere mit Parametern Wir immer bei der Objekterzeugung.
Learning By Doing Übungen GPanel Quadratfenster mit pixelunabhängigen Windowkoordinaten (doubles) Zweckmässige Standardwerte (defaults) 01 x 0 1 y // WbzEx5.java.
Lind 02/2005 Einführung in JAVA. Lind 02/2005 Beispiel: Mittelwert Es soll ein Programm erstellt werden, das den Mittelwert zweier reeller Zahlen berechnet.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
 Präsentation transkript:

1DVG3 - Paint Teil 2 Paint Teil2

DVG3 - Paint Teil 2 2 Weitere Entwicklungen Hinzufügen verschiedener Werkzeuge: Punkte Linien Rechtecke, Rechtecke mit runden Ecken, 3D-Rechtecke Ovale Polygonzüge Text einfügen Hinzufügen von Optionen: Füllmodus Polygonzug schließen Farbauswahl Linienarten Hinzufügen von Hilfsmitteln Hilfstexte anzeigen Protokoll schreiben Korrekturmöglichkeiten Speichern auf Dateien

DVG3 - Paint Teil 2 3 Werkzeuge: draw und point Um verschiedene Werkzeuge verfügbar zu machen, ist es günstig Buttons für jedes Werkzeug zu definieren. ActionListener muß auf verschiedene Aktionen reagieren. MouseListener und MouseMotionListener müssen in Abhängigkeit des gewählten Werkzeuges verschieden reagieren. Es sollte angezeigt welches Tool ausgewählt wurde. Es sollten Hinweise angezeigt werden, wie das ausgewählte Tool zu benutzen ist.

DVG3 - Paint Teil 2 4 Tools-Leiste, Tools-Menü Welches Werkzeug wird benutzt? Konstanten für jedes Wekzeug eine int-Konstante private static final int DRAW_PRESSED = 0; private static final int POINT_PRESSED = 1; Feld mit Namen aller Werkzeuge private static final String [] toolName = {"draw","point"}; Globale Variable private int toolStatus = DRAW_PRESSED; Label zur Anzeige welches Werkzeug ausgewählt wurde private Label toolLabel = new Label(" tool : "+toolName[toolStatus]); Programm zur Erzeugung der Buttons und Menüeinträger: createTools(MenuBar menu)

DVG3 - Paint Teil 2 5 private void createTools(MenuBar menu) { Menu toolsMenu = new Menu("Tools"); menu.add(toolsMenu); toolsMenu.addActionListener(this); toolsMenu.add(new MenuItem("draw", new MenuShortcut('d'))); toolsMenu.add(new MenuItem("point", new MenuShortcut('p'))); Panel toolsPanel = new Panel(); toolsPanel.setBackground(new Color(240,240,240)); toolsPanel.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridwidth = GridBagConstraints.REMAINDER; Button drawButton = new Button("draw"); drawButton.addActionListener(this); toolsPanel.add(drawButton,gbc); Button pointButton = new Button("point"); pointButton.addActionListener(this); toolsPanel.add(pointButton,gbc); gbc.weighty=1.0; toolsPanel.add(new Label(),gbc); add(toolsPanel,BorderLayout.WEST); }

DVG3 - Paint Teil 2 6 Erweiterung des ActionListeners Alte Version: public void actionPerformed(ActionEvent e) { dispose(); } Reagiert nur korrekt auf " exit " Es muss unterschieden werden, welcher Knopf gedrückt wurde.

DVG3 - Paint Teil 2 7 public void actionPerformed(ActionEvent e) { char command = e.getActionCommand().charAt(0); switch (command) { case 'e': dispose(); case 'd': toolStatus=DRAW_PRESSED; break; case 'p': toolStatus=POINT_PRESSED; break; } toolLabel.setText(" tool : "+toolName[toolStatus]); }

DVG3 - Paint Teil 2 8 Realisierung der Werkzeuge point: Wenn Maustaste gedrückt wird (mousePressed), muss ein Punkt gezeichnet werden. draw: Wenn Maustaste gedrückt wird (mousePressed), muss die Position gemerkt werden. Wenn Maus mit gedrückter Taste bewegt wird (mouseDragged), muss eine Linie vom vorherigen Punkt zum aktuellen Punkt gezeichnet werden und der aktuelle Punkt gespeichert werden.

DVG3 - Paint Teil 2 9 public void mousePressed(MouseEvent e) { x0 = e.getX(); y0 = e.getY(); switch (toolStatus) { case POINT_PRESSED: gPanel.getGraphics().fillOval(x0-1,y0-1,3,3); break; } } public void mouseDragged(MouseEvent e) { int x = e.getX(); int y = e.getY(); switch (toolStatus) { case DRAW_PRESSED: gPanel.getGraphics().drawLine(x0,y0,x,y); break; } x0=x; y0=y; showStatus(x, y); }

DVG3 - Paint Teil 2 10 Werkzeuge: line, rect Erweiterungen: Konstanten private static final int LINE_PRESSED = 2; private static final int RECT_PRESSED = 3; private static final String [] toolName = {"draw","point","line","rect"}; Menü und Buttons in createMenu(MenuBar menu) toolsMenu.add(new MenuItem("line", new MenuShortcut('l'))); toolsMenu.add(new MenuItem("rect", new MenuShortcut('r'))); Button lineButton = new Button("line"); lineButton.addActionListener(this); toolsPanel.add(lineButton,gbc); Button rectButton = new Button("rect"); rectButton.addActionListener(this); toolsPanel.add(rectButton,gbc);

DVG3 - Paint Teil 2 11 ActionListener case 'l': toolStatus=LINE_PRESSED; lineDraw=0; break; case 'r': toolStatus=RECT_PRESSED; rectDraw=0; break; Problem: Zum Zeichnen einer Linie bzw. eines Rechteckes benötigt man zwei Punkte. mousePressed muss wissen, ob der erste Punkt eingegeben wurde oder der Zweite globale Statusvariable: private int lineDraw = 0; private int rectDraw = 0; 0 erster Punkt wird erwartet 1 zweiter Punkt wird erwartet

DVG3 - Paint Teil 2 12 public void mousePressed(MouseEvent e) { int x = e.getX(); int y = e.getY(); switch (toolStatus) { case POINT_PRESSED: gPanel.getGraphics().fillOval(x-1,y-1,3,3); break; case LINE_PRESSED : if (lineDraw==1) gPanel.getGraphics().drawLine(x0,y0,x,y); lineDraw = 1-lineDraw; break; case RECT_PRESSED : if (rectDraw==1) gPanel.getGraphics().drawRect(Math.min(x,x0), Math.min(y,y0),Math.abs(x-x0),Math.abs(y-y0)); rectDraw = 1-rectDraw; break; } x0=x; y0=y; }

DVG3 - Paint Teil 2 13 Hilfstexte anzeigen Problem: Nach kurzer Zeit verliert man den Überblick worauf das Programm nun wartet. Erster Punkt der Linie oder zweiter?... Lösung: Anzeige von Hilfetexten. TextField am unteren Rand für Hilfstexte Erweiterungen: Globale Variable private static final String [] [] messages = { {"Kurve mit gedreuckter Maustaste zeichnen!"}, {"Punkt setzen!"}, {"Anfangspunkt eingeben!","Endpunkt eingeben!"}, {"Erste Ecke eingeben!", "Gegenueberliegende Ecke eingeben!"} }; private TextField messageField = new TextField(messages[toolStatus][0]);

DVG3 - Paint Teil 2 14 Hilfstextanzeige einrichten mit createMessage() private void createMessage() { messageField.setEditable(false); messageField.setBackground(new Color(240,240,240)); add(messageField,BorderLayout.SOUTH); } Anzeige der Hilfstexte In mousePressed case LINE_PRESSED : if (lineDraw==1) gPanel.getGraphics().drawLine(x0,y0,x,y); lineDraw = 1-lineDraw; messageField.setText(messages[LINE_PRESSED][lineDraw]); break; case RECT_PRESSED : if (rectDraw==1) gPanel.getGraphics().drawRect(Math.min(x,x0), Math.min(y,y0),Math.abs(x-x0),Math.abs(y-y0)); rectDraw = 1-rectDraw; messageField.setText(messages[RECT_PRESSED][rectDraw]); break;

DVG3 - Paint Teil 2 15 In actionPerformed... messageField.setText(messages[toolStatus][0]);

DVG3 - Paint Teil 2 16 Füllmodus Rechtecke können ausgefüllt werden oder leer gezeichnet werden. Checkbox Checkbox beeinflusst den Status Anordnung in dem rechten Statusbereich Im Menü erfüllt CheckboxMenuItem die gleiche Funktion Checkbox und CheckboxMenuItem erzeugen ItemEvent s

DVG3 - Paint Teil 2 17 Checkbox, CheckboxMenuItem Konstruktoren Checkbox() Checkbox(String label) Checkbox(String label, boolean state) CheckboxMenuItem() CheckboxMenuItem(String label) CheckboxMenuItem(String label, boolean state) Methoden public void addItemListener(ItemListener l) public void removeItemListener(ItemListener l) public boolean getState() public void setState(boolean state) public String getLabel() public void setLabel(String label)

DVG3 - Paint Teil 2 18 ItemListener, ItemAdapter Methode public void itemStateChanged(ItemEvent e) wird aufgerufen, wenn der Status der Checkbox bzw. des CheckboxMenuItem geändert wurde.

DVG3 - Paint Teil 2 19 ItemEvent Methoden public ItemSelectable getItemSelectable() liefert das Object, dessen Status geändert wurde public int getStateChanged() liefert den Zustand des geänderten Objektes SELECTED oder DESELECTED

DVG3 - Paint Teil 2 20 Globale Variable private boolean fillMode = false; private Checkbox fillCB = new Checkbox("fill",fillMode); private CheckboxMenuItem fillCBMI = new CheckboxMenuItem("fill",fillMode); Options-Menü in createStatus(MenuBar menu) Menu optionsMenu = new Menu("Options"); menu.add(optionsMenu); optionsMenu.add(fillCBMI); fillCBMI.addItemListener(this);... statusPanel.add(fillCB,gbc); fillCB.addItemListener(this); ItemListener public void itemStateChanged(ItemEvent e) { fillMode=!fillMode; fillCB.setState(fillMode); fillCBMI.setState(fillMode); }

DVG3 - Paint Teil 2 21 Fill-Mode realisieren Public void mousePressed(MouseEvent e) {... case RECT_PRESSED : if (rectDraw==1) if (fillMode)gPanel.getGraphics().fillRect (Math.min(x,x0),Math.min(y,y0), Math.abs(x-x0),Math.abs(y-y0)); else gPanel.getGraphics().drawRect (Math.min(x,x0),Math.min(y,y0), Math.abs(x-x0),Math.abs(y-y0)); rectDraw = 1-rectDraw; messageField.setText (messages[RECT_PRESSED][rectDraw]); break;...

DVG3 - Paint Teil 2 22 Protokoll schreiben Protokoll ermöglicht es, eine paint-Methode zu entwickeln, die das gleiche Bild erzeugt, wie gezeichnet wurde. Globale Variable private boolean protMode = false; private Checkbox protCB = new Checkbox("Protokoll",protMode); private CheckboxMenuItem protCBMI = new CheckboxMenuItem("Protokoll",protMode); private Frame protFrame = new Frame("Protokoll"); private TextArea protTA = new TextArea(); File-Menü und Checkbox in createFile(MenuBar menu) fileMenu.add(protCBMI); protCBMI.addItemListener(this); filePanel.add(protCB); protCB.addItemListener(this);

DVG3 - Paint Teil 2 23 ItemListener public void itemStateChanged(ItemEvent e) { ItemSelectable s = e.getItemSelectable(); if ( (s==fillCB) || (s==fillCBMI) ) { fillMode=!fillMode; fillCB.setState(fillMode); fillCBMI.setState(fillMode); return; } if ( (s==protCB) || (s==protCBMI) ) { protMode=!protMode; protCB.setState(protMode); protCBMI.setState(protMode); protFrame.setVisible(protMode); return; } }

DVG3 - Paint Teil 2 24 Protokoll schreiben private void writeProt(String text) { protTA.append(text+"\n"); } public void mousePressed(MouseEvent e) {... case POINT_PRESSED: gPanel.getGraphics().fillOval(x-1,y-1,3,3); writeProt("g.fillOval("+(x-1)+","+(y-1)+",3,3);"); break;....