Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "1DVG3 - Paint Teil 2 Paint Teil2. DVG3 - Paint Teil 2 2 Weitere Entwicklungen Hinzufügen verschiedener Werkzeuge: Punkte Linien Rechtecke, Rechtecke mit."—  Präsentation transkript:

1 1DVG3 - Paint Teil 2 Paint Teil2

2 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

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

4 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)

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

6 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.

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

8 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.

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

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

11 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

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

13 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]);

14 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;

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

16 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

17 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)

18 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.

19 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

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

21 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;...

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

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

24 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;....


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

Ähnliche Präsentationen


Google-Anzeigen