{"id":484,"date":"2018-11-15T14:03:30","date_gmt":"2018-11-15T13:03:30","guid":{"rendered":"https:\/\/freizone.net\/java-einfach-lernen\/?p=484"},"modified":"2020-05-11T19:29:40","modified_gmt":"2020-05-11T17:29:40","slug":"werkzeugspitzen","status":"publish","type":"post","link":"https:\/\/freizone.net\/java-einfach-lernen\/2018\/11\/15\/werkzeugspitzen\/","title":{"rendered":"Werkzeugspitzen"},"content":{"rendered":"<p>Unsere zwei Werkzeugspitzen m\u00fcssen wir zun\u00e4chst im Quellcode von Startfenster.java einf\u00fcgen. Dies verwirklichen wir durch zwei Radio-Buttons. Hierbei m\u00fcssen wir sowohl die zwei Buttons deklarieren wie auch ein Gruppierungswerkzeug namens ButtonGroup welches alle anderen Buttons in dieser Gruppe deaktiviert sobald ein Button selektiert wurde.<\/p>\n<p>Startfenster.java<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-highlight=\"7,10,25-27,48-54\">package miniMalen1;\r\n\r\nimport java.awt.BorderLayout;\r\nimport java.awt.Color;\r\nimport java.awt.Dimension;\r\nimport java.util.ArrayList;\r\nimport javax.swing.ButtonGroup;\r\nimport javax.swing.JFrame;\r\nimport javax.swing.JPanel;\r\nimport javax.swing.JRadioButton;\r\nimport javax.swing.JSpinner;\r\nimport javax.swing.JToolBar;\r\nimport javax.swing.SpinnerNumberModel;\r\n\r\npublic class StartFenster extends JFrame {\r\n\r\n  public static void main(String[] s) {\r\n    new StartFenster();\r\n  }\r\n\r\n  private ArrayList&lt;Grafikobjekt&gt; virtuellerBildschirm = new ArrayList&lt;Grafikobjekt&gt;();\r\n  private JPanel panel;\r\n  private int x = -10;\r\n  private int y = -10;\r\n  JRadioButton kreisBtn;\r\n  JRadioButton quadratBtn;\r\n \u00a0ButtonGroup\u00a0werkzeugspitzen\u00a0=\u00a0new\u00a0ButtonGroup();\r\n  JSpinner linienstaerke;\r\n  private JToolBar auswahl;\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(true);\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    \r\n    auswahl.add(kreisBtn);\r\n    auswahl.add(quadratBtn);\r\n  \r\n    SpinnerNumberModel nummern = new SpinnerNumberModel(10, 1, 99, 1); \/\/ ( 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    \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 int getLinienstaerke() {\r\n    int staerke = (int) this.linienstaerke.getValue();\r\n    return staerke;\r\n  }\r\n}\r\n<\/pre>\n<p>Nach der Deklaration (Zeile 25- 27), werden die RadioButtons in Zeile 48und 49und anschlie\u00dfend der Buttongroup werkzeugspitzen in den Zeilen 50 und 51 hinzugef\u00fcgt. Anschlie\u00dfend werden beide Buttons dem Auswahlobjekt in Zeile 53 und 54 hinzugef\u00fcgt.<\/p>\n<p>Da ButtonGroup kein Container ist, der die Buttons beinhaltet sondern lediglich daf\u00fcr sorgt das die Buttons als RadioButton-Gruppe behandelt werden, braucht und kann die ButtonGroup auch nicht der auswahl hinzugef\u00fcgt werden.<\/p>\n<p>Als n\u00e4chstes m\u00fcssen wir das Grafikobjekt modifizieren, wobei wir hier nur eine neue Variable deklarieren und den Konstruktor entsprechend anpassen m\u00fcssen:<\/p>\n<p>Grafikobjekt.java<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-highlight=\"9,11,14\">package miniMalen1;\r\n\r\nimport java.awt.Point;\r\n\r\nclass Grafikobjekt {\r\n\r\n  Point koordinaten;\r\n  int stiftdicke;\r\n  int stifttyp;\r\n\r\n  public Grafikobjekt(Point p, int sd, int st) {\r\n    this.koordinaten = p;\r\n    this.stiftdicke = sd;\r\n    this.stifttyp = st;\r\n  }\r\n\r\n  public Point getKoordinaten() {\r\n    return koordinaten;\r\n  }\r\n\r\n  public void setKoordinaten(Point koordinaten) {\r\n    this.koordinaten = koordinaten;\r\n  }\r\n\r\n  public int getStiftdicke() {\r\n    return stiftdicke;\r\n  }\r\n\r\n  public void setStiftdicke(int stiftdicke) {\r\n    this.stiftdicke = stiftdicke;\r\n  }\r\n}<\/pre>\n<p>Zuletzt die Tafel.java<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-highlight=\"33-37,49-54\">package miniMalen1;\r\n\r\nimport java.awt.Color;\r\nimport java.awt.Graphics;\r\nimport java.awt.Point;\r\nimport java.awt.event.MouseEvent;\r\nimport java.awt.event.MouseListener;\r\nimport java.awt.event.MouseMotionListener;\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 g) {\r\n    super.paintComponent(g);\r\n\r\n    {\r\n      for (int z = 0; z &lt; virtuellerBildschirm.size(); z++) {\r\n        Grafikobjekt go = virtuellerBildschirm.get(z);\r\n        if(go.stifttyp == 2)\r\n        g.fillRect(go.getKoordinaten().x, go.getKoordinaten().y, go.getStiftdicke(), go.getStiftdicke());\r\n        else\r\n        g.fillOval(go.getKoordinaten().x, go.getKoordinaten().y, go.getStiftdicke(), go.getStiftdicke());\r\n      }\r\n    }\r\n\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    int werkzeug;\r\n    if ( auswahl.quadratBtn.isSelected() ) {\r\n      werkzeug = 2;\r\n    } else {\r\n      werkzeug = 1;\r\n    }\r\n    virtuellerBildschirm.add(new Grafikobjekt(new Point(x, y), auswahl.getLinienstaerke(), werkzeug));\r\n\r\n    this.repaint();\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    int werkzeug;\r\n    if ( auswahl.quadratBtn.isSelected() ) {\r\n      werkzeug = 2;\r\n    } else {\r\n      werkzeug = 1;\r\n    }\r\n    virtuellerBildschirm.add(new Grafikobjekt(new Point(x, y), auswahl.getLinienstaerke(),werkzeug));\r\n\r\n    this.repaint();\r\n  }\r\n}\r\n<\/pre>\n<p>Zun\u00e4chst wird in Zeile 49 bzw. 66 eine if-Abfrage hinzugef\u00fcgt die im Falle das der RadioButton quadratBtn selektiert ist der Variable werkzeug\u00a0 den Wert 2 zuweist, andernfalls 1 ( zwar k\u00f6nnte man dies mit einem Boolean noch einfacher l\u00f6sen, aber wir wollen ja letztendlich noch mehr Werkzeugspitzen hinzuf\u00fcgen k\u00f6nnen).<br \/>\nAnschlie\u00dfend m\u00fcssen wir noch unserem virtuellem Bildschirm in Zeile 54 bzw. 71 die Variable werkzeug mit\u00fcbergeben.<br \/>\nSchlie\u00dflich f\u00fcgen wir noch in der paint-Methode ab Zeile 33 eine if-Abfrage ein, die je nachdem ob der stifttyp des Grafikobjekts 1 oder 2 ist ein Quadrat oder einen Kreis zeichnet.<\/p>\n<p>Wie ihr vielleicht schon bemerkt habt, k\u00f6nnen wir an dieser Stelle bereits die erste effektive Verbesserungen am Quellcode vornehmen. Bis jetzt m\u00fcssen wir die Aktionen nach der Initialisierung der x und y Variablen in der MouseDragged und MousePressed Methode doppelt schreiben. Einfacher w\u00e4re es die x und y Variable an eine weitere Methode zeichenAufVirtuellenBildschirm(x, y) zu \u00fcbergeben.<br \/>\nDer Quellcode w\u00fcrde dann (ohne die noch nicht verwendeten MouseListener-Methoden) folgenderma\u00dfen aussehen:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-highlight=\"42-68\">package miniMalen1;\r\n\r\nimport java.awt.Color;\r\nimport java.awt.Graphics;\r\nimport java.awt.Point;\r\nimport java.awt.event.MouseEvent;\r\nimport java.awt.event.MouseListener;\r\nimport java.awt.event.MouseMotionListener;\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 g) {\r\n    super.paintComponent(g);\r\n\r\n    {\r\n      for (int z = 0; z &lt; virtuellerBildschirm.size(); z++) {\r\n        Grafikobjekt go = virtuellerBildschirm.get(z);\r\n        if(go.stifttyp == 2)\r\n        g.fillRect(go.getKoordinaten().x, go.getKoordinaten().y, go.getStiftdicke(), go.getStiftdicke());\r\n        else\r\n        g.fillOval(go.getKoordinaten().x, go.getKoordinaten().y, go.getStiftdicke(), go.getStiftdicke());\r\n      }\r\n    }\r\n\r\n  }\r\n  \r\n  public void zeichneAufVirtuellenBildschirm(int x, int y) {\r\n    int werkzeug;\r\n    if ( auswahl.quadratBtn.isSelected() ) {\r\n      werkzeug = 2;\r\n    } else {\r\n      werkzeug = 1;\r\n    }\r\n    virtuellerBildschirm.add(new Grafikobjekt(new Point(x, y), auswahl.getLinienstaerke(), werkzeug));\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    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    zeichneAufVirtuellenBildschirm(x,y);\r\n  }\r\n\r\n}\r\n<\/pre>\n<p>doch schon wesentlich k\u00fcrzer oder?<\/p>\n<p>Als n\u00e4chstes wollen wir eine weitere Option hinzuf\u00fcgen: Gef\u00fcllt oder nicht gef\u00fcllt.<br \/>\nKaffee gef\u00e4llig?<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unsere zwei Werkzeugspitzen m\u00fcssen wir zun\u00e4chst im Quellcode von Startfenster.java einf\u00fcgen. Dies verwirklichen wir durch zwei Radio-Buttons. Hierbei m\u00fcssen wir sowohl die zwei Buttons deklarieren wie auch ein Gruppierungswerkzeug namens ButtonGroup welches alle anderen Buttons in dieser Gruppe deaktiviert sobald ein Button selektiert wurde. Startfenster.java package miniMalen1; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.util.ArrayList; [&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\/484"}],"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=484"}],"version-history":[{"count":15,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/484\/revisions"}],"predecessor-version":[{"id":884,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/484\/revisions\/884"}],"wp:attachment":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/media?parent=484"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/categories?post=484"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/tags?post=484"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}