{"id":500,"date":"2018-11-15T14:03:54","date_gmt":"2018-11-15T13:03:54","guid":{"rendered":"https:\/\/freizone.net\/java-einfach-lernen\/?p=500"},"modified":"2020-05-11T19:29:40","modified_gmt":"2020-05-11T17:29:40","slug":"farbwaehler","status":"publish","type":"post","link":"https:\/\/freizone.net\/java-einfach-lernen\/2018\/11\/15\/farbwaehler\/","title":{"rendered":"Farbw\u00e4hler"},"content":{"rendered":"<p>Nat\u00fcrlich ist es langweilig immer in derselben Farbe zu malen. Also f\u00fcgen wir einen Farbw\u00e4hler hinzu. Praktischerweise m\u00fcssen wir uns damit nicht lange aufhalten, den Java stellt uns mit JColorChooser einen umfangreichen Farbw\u00e4hler zur Verf\u00fcgung. Das ganze sieht so aus, das wir zun\u00e4chst eine zweite JToolBar erstellen. Schlie\u00dflich wollen wir noch weitere Werkzeuge\u00a0hinzuf\u00fcgen und da passt eine Seitenleiste ganz gut. In diese Seitenleiste kommt dann der Button f\u00fcr den Farbw\u00e4hler. Dieser Button wird mit einem ActionListener versehen, in dessen Methode wir schlie\u00dflich den Farbw\u00e4hler aufpoppen lassen. Schreiten wir zur Tat.<\/p>\n<p>StartFenster.java<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-highlight=\"8,9,12,25,38-40,59-62,77-88,98,115-127\">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.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\r\n  public static void main(String[] s) {\r\n    new StartFenster();\r\n  }\r\n\r\n  JRadioButton kreisBtn;\r\n  JRadioButton quadratBtn;\r\n  JSpinner linienstaerke;\r\n  JCheckBox fuellen;\r\n  ButtonGroup werkzeugspitzen = new ButtonGroup();\r\n  private JToolBar auswahl;\r\n  private JToolBar seitenleiste;\r\n  private JButton farbwaehlerIcon;\r\n  Color farbe = Color.BLACK;\t\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    seitenleiste = new JToolBar();\r\n    seitenleiste.setPreferredSize(new Dimension(30, 200)); \r\n    seitenleiste.setFloatable(false);\r\n    seitenleiste.setOrientation( JToolBar.VERTICAL );\r\n\r\n    Insets nullMargin = new Insets( 5, 7, 5, 5 );\r\n    seitenleiste.setMargin( nullMargin );\r\n    \r\n    kreisBtn = new JRadioButton(\"Kreis\");\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    farbwaehlerIcon = new JButton() {\r\n      public void paintComponent(Graphics g) {\r\n        super.paintComponent(g);\r\n        g.setColor(farbe);\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(farbe);\r\n    farbwaehlerIcon.setForeground(farbe);\r\n    seitenleiste.add(farbwaehlerIcon);\r\n    \r\n    SpinnerNumberModel nummern = new SpinnerNumberModel(10.0, 1.0, 99.0, 1.0); \/\/ ( default, Minimum, Maximum, Schrittweite )\r\n\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.farbe;\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      \tfarbe = JColorChooser.showDialog(this, \"Farbe w\u00e4hlen\", farbe);\r\n      farbwaehlerIcon.setBackground(farbe);\r\n      \tfarbwaehlerIcon.repaint();\r\n      }\t\r\n  }\r\n}\r\n<\/pre>\n<p>In Zeile 38-40 deklarieren wir die ben\u00f6tigten Variablen f\u00fcr Seitenleiste und Farbw\u00e4hlericon. Au\u00dferdem legen wir die voreingestellte Farbe fest.<br \/>\nIn Zeile 25 implementieren wir die ActionListener-Schnittstelle<br \/>\nIn Zeile 59-62 definieren wir die Seitenleiste.<br \/>\nIn Zeile 77-83 initialisieren wir das farbwaehlerIcon mit einem JButton, den wir aber an unsere Bed\u00fcrfnisse anpassen indem wir seine paint-Methode \u00fcberschreiben. Anschlie\u00dfend setzen wir den ActionListener auf ihn (Zeile 85) und legen die Vordergrund wie Hintergrundfarbe fest um dann schlie\u00dflich unserer seitenleiste das farbwaehlerIcon hinzuzuf\u00fcgen.<br \/>\nIn Zeile 98 f\u00fcgen wir die Seitenleiste dem &#8222;westlichen&#8220; also linken Teil unserer Seite zu.<br \/>\nIn Zeile 119-127 \u00fcberschreiben wir die Methode des ActionListeners. Hier sehen wir wie einfach der JColorChooser einzusetzen ist. Bei showDialog erwartet drei Angaben um zu starten: der aufrufende Kontext (in unserem Fall this also die Klasse StartFenster), der Titel des Dialogfensters das aufpoppt, sowie die voreingestellte Farbe. Der Compiler blendet das Fenster ein und nachdem eine Farbe gew\u00e4hlt wurde weist er sie unserer Variable farbe zu.<br \/>\nDa wir m\u00f6chten das unser modifizierter Button farbwaehlerIcon dann auch die neue Farbe zeigt, stellen wir erneut den Background ein und bewirken anschlie\u00dfend ein Repaint() unseres Buttons farbwaehlerIcon.<br \/>\nAusserdem f\u00fcgen wir noch einen Getter f\u00fcr unsere neue Variable farbe hinzu (Zeile 115-117).<\/p>\n<p>Grafikobjekt.java<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-highlight=\"13,16,20,38-40\">package miniMalen1;\r\n\r\nimport java.awt.Color;\r\nimport java.awt.Point;\r\nimport java.awt.Shape;\r\n\r\nimport javax.swing.JCheckBox;\r\n\r\nclass Grafikobjekt {\r\n\r\n  private Point koordinaten;\r\n  private Shape form;\r\n  private Color farbe;\r\n  private boolean gefuellt;\r\n\r\n  public Grafikobjekt(Point p, Shape st, boolean cb, Color f) {\r\n    this.koordinaten = p;\r\n    this.form = st;\r\n    this.gefuellt = cb;\r\n    this.farbe = f;\r\n  }\r\n\r\n  public Point getKoordinaten() {\r\n    return this.koordinaten;\r\n  }\r\n\r\n  public void setKoordinaten(Point koordinaten) {\r\n    this.koordinaten = koordinaten;\r\n  }\r\n\r\n  public Shape getForm() {\r\n    return this.form;\r\n  }\r\n\r\n  public boolean isGefuellt() {\r\n    return this.gefuellt;\r\n  }\r\n  public Color getFarbe() {\r\n    return this.farbe;\r\n  }\r\n}\r\n<\/pre>\n<p>Die \u00c4nderungen an unserem Grafikobjekt sind denkbar einfach: Eine neue Variable farbe (Zeile 13) sowie die entsprechende \u00c4nderung am Konstruktor (Zeile 16 und 20) und ein neuer Getter (Zeile 38-40).<\/p>\n<p>Tafel.java<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-highlight=\"38,55\">package miniMalen1;\r\n\r\nimport java.awt.Color;\r\nimport java.awt.Graphics;\r\nimport java.awt.Graphics2D;\r\nimport java.awt.Point;\r\nimport java.awt.Rectangle;\r\nimport java.awt.Shape;\r\nimport java.awt.event.MouseEvent;\r\nimport java.awt.event.MouseListener;\r\nimport java.awt.event.MouseMotionListener;\r\nimport java.awt.geom.Ellipse2D;\r\nimport java.awt.geom.Rectangle2D;\r\nimport java.util.ArrayList;\r\nimport javax.swing.JPanel;\r\n\r\npublic class Tafel extends JPanel implements MouseListener, MouseMotionListener {\r\n\r\n  private ArrayList&lt;Grafikobjekt&gt; virtuellerBildschirm = new ArrayList&lt;Grafikobjekt&gt;();\r\n\r\n  private int x = -10;\r\n  private int y = -10;\r\n  private StartFenster auswahl;\r\n\r\n  public Tafel(StartFenster auswahl) {\r\n    this.auswahl = auswahl;\r\n    this.setBackground(Color.WHITE);\r\n    this.addMouseListener(this);\r\n    this.addMouseMotionListener(this);\r\n  }\r\n\r\n  public void paintComponent(Graphics g0) {\r\n    Graphics2D g = (Graphics2D) g0;\r\n    super.paintComponent(g);\r\n    \r\n      for (int z = 0; z &lt; virtuellerBildschirm.size(); z++) {\r\n        Grafikobjekt go = virtuellerBildschirm.get(z);\r\n        g.setColor(go.getFarbe());\r\n        if(go.isGefuellt()) {\r\n          g.fill(go.getForm());\r\n        } else {\r\n          g.draw(go.getForm());\r\n        }\r\n      }\r\n  }\r\n  \r\n  public void zeichneAufVirtuellenBildschirm(double dx, double dy) {\r\n    Shape werkzeug;\r\n    \r\n    if ( auswahl.quadratBtn.isSelected() ) {\r\n      werkzeug = new Rectangle2D.Double(dx, dy, auswahl.getLinienstaerke(), auswahl.getLinienstaerke());\r\n    } else {\r\n      werkzeug = new Ellipse2D.Double(dx, dy, auswahl.getLinienstaerke(),auswahl.getLinienstaerke());\r\n    }\r\n    virtuellerBildschirm.add(new Grafikobjekt(new Point(x, y), werkzeug, auswahl.fuellen.isSelected(),auswahl.getFarbe() ));\r\n\r\n    this.repaint();\r\n  }\r\n\r\n  @Override\r\n  public void mouseDragged(MouseEvent e) {\r\n    System.out.println(\"Dragged\");\r\n    x = e.getX();\r\n    y = e.getY();\r\n    \r\n    zeichneAufVirtuellenBildschirm(x,y);\r\n  }\r\n\r\n  @Override\r\n  public void mousePressed(MouseEvent e) {\r\n    System.out.println(\"Pressed\");\r\n    x = e.getX();\r\n    y = e.getY();\r\n    \r\n    zeichneAufVirtuellenBildschirm(x,y);\r\n  }\r\n}\r\n<\/pre>\n<p>In Zeile 55 greifen wir mit <code>auswahl.getFarbe()<\/code> auf den Getter von farbe im StartFenster zu und erhalten die derzeitige farbe die wir unserem Grafikobjekt \u00fcbergeben.<\/p>\n<p>In Zeile 38 m\u00fcssen wir dann nur noch vor der if-Abfrage, die Farbe einstellen mit der gezeichnet werden soll.<\/p>\n<p>So macht das Malen doch gleich viel mehr Spa\u00df, oder?<\/p>\n<p>Als n\u00e4chstes wollen wir unsere Seitenleiste ausbauen und zwischen einem Pinsel und einer Radierfunktion hin- und herschalten k\u00f6nnen.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nat\u00fcrlich ist es langweilig immer in derselben Farbe zu malen. Also f\u00fcgen wir einen Farbw\u00e4hler hinzu. Praktischerweise m\u00fcssen wir uns damit nicht lange aufhalten, den Java stellt uns mit JColorChooser einen umfangreichen Farbw\u00e4hler zur Verf\u00fcgung. Das ganze sieht so aus, das wir zun\u00e4chst eine zweite JToolBar erstellen. Schlie\u00dflich wollen wir noch weitere Werkzeuge\u00a0hinzuf\u00fcgen und da [&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\/500"}],"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=500"}],"version-history":[{"count":11,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/500\/revisions"}],"predecessor-version":[{"id":842,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/500\/revisions\/842"}],"wp:attachment":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/media?parent=500"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/categories?post=500"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/tags?post=500"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}