{"id":507,"date":"2018-11-15T14:03:59","date_gmt":"2018-11-15T13:03:59","guid":{"rendered":"https:\/\/freizone.net\/java-einfach-lernen\/?p=507"},"modified":"2020-05-11T19:29:40","modified_gmt":"2020-05-11T17:29:40","slug":"pinsel-und-radierer","status":"publish","type":"post","link":"https:\/\/freizone.net\/java-einfach-lernen\/2018\/11\/15\/pinsel-und-radierer\/","title":{"rendered":"Pinsel und Radierer"},"content":{"rendered":"<p>Die Idee ist, die Werkzeugspitzen nicht nur zum Malen, sondern auch zum Radieren zu verwenden. Zwar k\u00f6nnten wir standardm\u00e4\u00dfig die Farbe des Radierers auf Wei\u00df stellen, es ist aber nicht viel Aufwand zus\u00e4tzlich eine Hintergrundfarbe zu definieren und bei Wahl des Radierers die Hintergrundfarbe und bei Wahl des Pinsels die Vordergrundfarbe zu nehmen. Wir beginnen wieder in der:<br \/>\nStartFenster.java<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-highlight=\"22,41,42,44,46-48,85-98,114-131,158\">package miniMalen1;\r\n\r\nimport java.awt.BorderLayout;\r\nimport java.awt.Color;\r\nimport java.awt.Dimension;\r\nimport java.awt.Graphics;\r\nimport java.awt.Insets;\r\nimport java.awt.event.ActionEvent;\r\nimport java.awt.event.ActionListener;\r\nimport java.util.ArrayList;\r\n\r\nimport javax.swing.Action;\r\nimport javax.swing.BorderFactory;\r\nimport javax.swing.ButtonGroup;\r\nimport javax.swing.JButton;\r\nimport javax.swing.JCheckBox;\r\nimport javax.swing.JColorChooser;\r\nimport javax.swing.JFrame;\r\nimport javax.swing.JPanel;\r\nimport javax.swing.JRadioButton;\r\nimport javax.swing.JSpinner;\r\nimport javax.swing.JToggleButton;\r\nimport javax.swing.JToolBar;\r\nimport javax.swing.SpinnerNumberModel;\r\n\r\npublic class StartFenster extends JFrame implements ActionListener\r\n{\r\n  public static void main(String[] s) {\r\n    new StartFenster();\r\n  }\r\n\r\n  private JToolBar auswahl;\r\n  private JToolBar seitenleiste;\r\n  \r\n  JRadioButton kreisBtn;\r\n  JRadioButton quadratBtn;\r\n  JCheckBox fuellen;\r\n  JSpinner linienstaerke;\r\n  ButtonGroup werkzeugspitzen = new ButtonGroup();\r\n\r\n  JToggleButton pinselBtn;\r\n  JToggleButton radiererBtn;\r\n  private JButton farbwaehlerIcon;\r\n  private JButton farbwaehlerIconHG;\r\n  \r\n  Color vgfarbe = Color.BLACK;\r\n  Color hgfarbe = Color.WHITE;\r\n  Color aktuelleFarbe = Color.BLACK;\r\n\r\n  public StartFenster() {\r\n    initialisiereStartFenster();\r\n  }\r\n\r\n  private void initialisiereStartFenster() {\r\n    this.setDefaultCloseOperation(EXIT_ON_CLOSE);\r\n    this.setBounds(0, 0, 500, 500);\r\n    this.setLocationRelativeTo(null);\r\n    this.setAlwaysOnTop(true);\r\n    this.setBackground(Color.white);\r\n    this.setTitle(\"Tafel\");\r\n    this.setLayout(new BorderLayout());\r\n\r\n    auswahl = new JToolBar();\r\n    auswahl.setPreferredSize(new Dimension(300, 30)); \/\/ PreferredSize = bevorzugte Gr\u00f6\u00dfe\r\n    auswahl.setFloatable(false);\r\n    \r\n    kreisBtn = new JRadioButton(\"Kreis\");\r\n    kreisBtn.setSelected(true);\r\n    quadratBtn = new JRadioButton(\"Quadrat\");\r\n    werkzeugspitzen.add(kreisBtn);\r\n    werkzeugspitzen.add(quadratBtn);\r\n    auswahl.add(kreisBtn);\r\n    auswahl.add(quadratBtn);\r\n    \r\n    fuellen = new JCheckBox(\"F\u00fcllen\");\r\n    auswahl.add(fuellen);\r\n    \r\n    seitenleiste = new JToolBar();\r\n    seitenleiste.setPreferredSize(new Dimension(30, 200)); \/\/ PreferredSize = bevorzugte Gr\u00f6\u00dfe\r\n    seitenleiste.setFloatable(false);\r\n    seitenleiste.setOrientation( JToolBar.VERTICAL );\r\n      Insets nullMargin = new Insets( 5, 7, 5, 5 );\r\n      seitenleiste.setMargin( nullMargin );\r\n      \r\n    pinselBtn = new JToggleButton(\"P\") ;\r\n    pinselBtn.setPreferredSize(new Dimension(20,20));\r\n    pinselBtn.setSelected(true);\r\n    pinselBtn.setAlignmentX(CENTER_ALIGNMENT);\r\n    pinselBtn.setBorder( BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));\r\n    pinselBtn.setSelected(true);\r\n    pinselBtn.addActionListener(this);\r\n\r\n    radiererBtn = new JToggleButton(\"R\");\r\n    radiererBtn.setPreferredSize(new Dimension(20,20));\r\n    radiererBtn.setSelected(false);\r\n    radiererBtn.setAlignmentX(CENTER_ALIGNMENT);\r\n    radiererBtn.setBorder( BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));\r\n    radiererBtn.addActionListener(this);\r\n\r\n    \r\n    farbwaehlerIcon = new JButton() {\r\n      public void paintComponent(Graphics g) {\r\n        super.paintComponent(g);\r\n        g.setColor(vgfarbe);\r\n        g.fillRect(20, 20, 20, 20);\r\n      }\r\n    };\r\n    farbwaehlerIcon.setPreferredSize(new Dimension(20,20));\r\n    farbwaehlerIcon.addActionListener(this);\r\n    farbwaehlerIcon.setBackground(vgfarbe);\r\n    farbwaehlerIcon.setForeground(vgfarbe);\r\n    farbwaehlerIcon.setAlignmentX(CENTER_ALIGNMENT);\r\n    \r\n    farbwaehlerIconHG = new JButton() {\r\n      public void paintComponent(Graphics g) {\r\n        super.paintComponent(g);\r\n        g.setColor(hgfarbe);\r\n        g.fillRect(20, 20, 20, 20);\r\n      }\r\n    };\r\n    farbwaehlerIconHG.setPreferredSize(new Dimension(20,20));\r\n    farbwaehlerIconHG.addActionListener(this);\r\n    farbwaehlerIconHG.setBackground(hgfarbe);\r\n    farbwaehlerIconHG.setForeground(hgfarbe);\r\n    farbwaehlerIconHG.setAlignmentX(CENTER_ALIGNMENT);\r\n\r\n    seitenleiste.add(pinselBtn);\r\n    seitenleiste.add(radiererBtn);\r\n    seitenleiste.addSeparator();\r\n    seitenleiste.add(farbwaehlerIcon);\r\n    seitenleiste.add(farbwaehlerIconHG);\r\n\r\n    SpinnerNumberModel nummern = new SpinnerNumberModel(10.0, 1.0, 99.0, 1.0); \/\/ default, Minimum, Maximum, Schrittweite\r\n    linienstaerke = new JSpinner(nummern);\r\n    linienstaerke.setMinimumSize(new Dimension(50, 30)); \/\/ setzt die Mindestgr\u00f6\u00dfe ( Breite, H\u00f6he )\r\n    linienstaerke.setMaximumSize(new Dimension(50, 30)); \/\/ setzt die Maximalgr\u00f6\u00dfe\r\n\r\n    auswahl.add(linienstaerke);\r\n    this.add(auswahl, BorderLayout.PAGE_START);\r\n    this.add(seitenleiste,BorderLayout.WEST);\r\n    \r\n    Tafel tafel = new Tafel(this);\r\n    this.add(tafel);\r\n\r\n    sichtbar();\r\n  }\r\n\r\n  private void sichtbar() {\r\n    this.setVisible(true);\r\n\r\n  }\r\n  \r\n  public double getLinienstaerke() {\r\n    double staerke = (double) this.linienstaerke.getValue();\r\n    return staerke;\r\n  }\r\n  public Color getFarbe() {\r\n    return this.aktuelleFarbe;\r\n  }\r\n\r\n  @Override\r\n  public void actionPerformed(ActionEvent e) {\r\n      Object source = e.getSource();\r\n      if(source == farbwaehlerIcon) {\r\n      \tvgfarbe = JColorChooser.showDialog(this, \"Vordergrundfarbe w\u00e4hlen\", vgfarbe);\r\n      farbwaehlerIcon.setBackground(vgfarbe);\r\n      aktuelleFarbe = vgfarbe;\r\n      \tfarbwaehlerIcon.repaint();\r\n      } else if(source == farbwaehlerIconHG) {\r\n      \thgfarbe = JColorChooser.showDialog(this, \"Hintergrundfarbe w\u00e4hlen\", vgfarbe);\r\n      farbwaehlerIconHG.setBackground(hgfarbe);\r\n      aktuelleFarbe = hgfarbe;\r\n      \tfarbwaehlerIconHG.repaint();\r\n      }\r\n      if ( source == pinselBtn ) {\r\n      \tpinselBtn.setSelected(true);\r\n      \tradiererBtn.setSelected( false );\r\n      \taktuelleFarbe = vgfarbe;\r\n      }\r\n\r\n      if ( source == radiererBtn ) {\r\n      \tradiererBtn.setSelected(true);\r\n      \tpinselBtn.setSelected( false );\r\n      \taktuelleFarbe = hgfarbe;\r\n      }\r\n  \r\n  }\r\n}\r\n<\/pre>\n<p>Zuerst deklarieren wir wieder die ben\u00f6tigten Variablen: Zwei JToggleButtons\u00a0 (Zeile 41, 42) und einen weiteren JButton (Zeile 44). Ein JToggleButton ist ein normaler Button, der jedoch &#8222;einrasten&#8220; kann. Diesen nehmen wir, weil JRadioButtons f\u00fcr die schmale Seitenleiste weniger geeignet sind. Ausserdem ben\u00f6tigen wir eine Variable f\u00fcr die aktuelleFarbe (Zeile 48) da wir unser Grafikobjekt so klein wie m\u00f6glich halten wollen. Ansonsten m\u00fcssten wir in der Tafel eine extra if-Abfrage machen, welches Werkzeug (Pinsel oder Radierer) gew\u00e4hlt ist und dementsprechend reagieren. Performanter ist es daher, gleich bei der Auswahl des Werkzeugs die aktuelleFarbe entsprechend einzustellen. Der Pinsel malt mit der Vordergrundfarbe <em>vgfarbe<\/em>, der Radierer mit der Hintergrundfarbe\u00a0<em>hgfarbe<\/em>. Diese beiden Variablen deklarieren wir ebenfalls. Die alte Variable <em>farbe<\/em> wird gel\u00f6scht.<\/p>\n<p>In den Zeilen 85-98 initialisieren wir die JToggleButtons.<br \/>\n<code>setAlignmentX()<\/code> und <code>setBorder()<\/code> sind notwendig um die Buttons zu zentrieren und kleiner darzustellen (der Rand ist ansonsten zu gro\u00df und zu globig f\u00fcr die schmale Seitenleiste).<\/p>\n<p>In 114-125 erstellen wir einen neuen Farbw\u00e4hler Button wie im vorherigen Kapitel.<\/p>\n<p>In 127-131 wird das ganze an die Seitenleiste geheftet. Zeile 129 setzt zwischen den Werkzeugen und den Farben einen kleinen Abstand.<\/p>\n<p>Schlie\u00dflich m\u00fcssen wir nur noch den Getter in Zeile 158 auf aktuelleFarbe umstellen.<br \/>\nDas wars!<\/p>\n<p>Als n\u00e4chstes wollen wir ein kleines Men\u00fc hinzuf\u00fcgen.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Idee ist, die Werkzeugspitzen nicht nur zum Malen, sondern auch zum Radieren zu verwenden. Zwar k\u00f6nnten wir standardm\u00e4\u00dfig die Farbe des Radierers auf Wei\u00df stellen, es ist aber nicht viel Aufwand zus\u00e4tzlich eine Hintergrundfarbe zu definieren und bei Wahl des Radierers die Hintergrundfarbe und bei Wahl des Pinsels die Vordergrundfarbe zu nehmen. Wir beginnen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/507"}],"collection":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/comments?post=507"}],"version-history":[{"count":9,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/507\/revisions"}],"predecessor-version":[{"id":843,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/507\/revisions\/843"}],"wp:attachment":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/media?parent=507"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/categories?post=507"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/tags?post=507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}