1 / 24

Paint Teil2

Paint Teil2. 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

casey-guy
Download Presentation

Paint Teil2

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. 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-Konstanteprivate static final int DRAW_PRESSED = 0;private static final int POINT_PRESSED = 1; • Feld mit Namen aller Werkzeugeprivate static final String [] toolName = {"draw","point"}; • Globale Variableprivate int toolStatus = DRAW_PRESSED; • Label zur Anzeige welches Werkzeug ausgewählt wurdeprivate 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: • Konstantenprivate 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. ActionListenercase '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 erwartet1  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 Variableprivate 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 mousePressedcase 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 ItemEvents 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 • Methodepublic 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 ObjektesSELECTED 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); • ItemListenerpublic 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 schreibenprivate 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;.... DVG3 - Paint Teil 2

More Related