{"id":474,"date":"2018-11-15T14:02:36","date_gmt":"2018-11-15T13:02:36","guid":{"rendered":"https:\/\/freizone.net\/java-einfach-lernen\/?p=474"},"modified":"2020-05-11T19:29:40","modified_gmt":"2020-05-11T17:29:40","slug":"eigenes-arraylist-objekt","status":"publish","type":"post","link":"https:\/\/freizone.net\/java-einfach-lernen\/2018\/11\/15\/eigenes-arraylist-objekt\/","title":{"rendered":"Eigenes ArrayList Objekt"},"content":{"rendered":"<p>Mit unserem eigenem Objekt k\u00f6nnen wir eine Vielzahl von n\u00fctzlichen Funktionen f\u00fcr unser Zeichenprogramm umsetzen. Zun\u00e4chst wollen wir uns jedoch erst mit der Grundstruktur besch\u00e4ftigen:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">class Grafikobjekt {\r\n  \r\n  Point koordinaten;\r\n  int stiftdicke;\r\n  \r\n  public Grafikobjekt(Point p, int sd) {\r\n    this.koordinaten = p;\r\n    this.stiftdicke = sd;\r\n  }\r\n}<\/pre>\n<p>Neben den zwei deklarierten Variablen brauchen wir nur noch einen Konstruktor der ebendiese notwendigen Daten \u00fcbernimmt.<br \/>\nUm die Klasse zu korrekt zu kapseln brauchen wir jetzt noch sogenannte &#8218;getter&#8216;. In Eclipse k\u00f6nnen diese unter <em>Quelltext-&gt;Getter und Setter generieren<\/em> automatisch erstellt werden wobei wir, um nur die Getter zu generieren, im Pop-Up einen Haken bei Getter setzen und auf ok gehen. Die Setter brauchen wir im Moment nicht.<br \/>\nSo sieht unser Quelltext nach der Generierung der Getter aus:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">class Grafikobjekt {\r\n  \r\n  Point koordinaten;\r\n  int stiftdicke;\r\n  \r\n  public Grafikobjekt(Point p, int sd) {\r\n    this.koordinaten = p;\r\n    this.stiftdicke = sd;\r\n  }\r\n\r\n  public Point getKoordinaten() {\r\n    return koordinaten;\r\n  }\r\n\r\n  public int getStiftdicke() {\r\n    return stiftdicke;\r\n  }\r\n}\r\n<\/pre>\n<p>Jetzt noch der komplette Quelltext mit der Anwendung dieser Klasse:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">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.Point;\r\nimport java.awt.event.MouseAdapter;\r\nimport java.awt.event.MouseEvent;\r\nimport java.util.ArrayList;\r\nimport javax.swing.JFrame;\r\nimport javax.swing.JPanel;\r\nimport javax.swing.JSpinner;\r\nimport javax.swing.JToolBar;\r\nimport javax.swing.SpinnerNumberModel;\r\nimport javax.swing.event.ChangeEvent;\r\nimport javax.swing.event.ChangeListener;\r\n\r\npublic class Tafel extends JFrame {\r\n\r\n  public static void main(String[] s) {\r\n    new Tafel();\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  private JSpinner linienstaerke;\r\n  private JToolBar auswahl;\r\n\r\n  public Tafel() {\r\n    initialisiereTafel();\r\n  }\r\n\r\n  private void initialisiereTafel() {\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    this.add(auswahl, BorderLayout.PAGE_START);\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\r\n    sichtbar();\r\n\r\n    panel = new JPanel() {\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            g.fillOval(go.getKoordinaten().x, go.getKoordinaten().y, go.getStiftdicke(),\r\n                go.getStiftdicke());\r\n          }\r\n        }\r\n\r\n      }\r\n\r\n    };\r\n\r\n    panel.setBackground(Color.WHITE);\r\n\r\n    panel.setBounds(0, 0, 500, 500);\r\n    this.add(panel);\r\n\r\n    panel.addMouseMotionListener(new MouseAdapter() {\r\n      public void mouseDragged(MouseEvent arg0) {\r\n        System.out.println(\"Dragged\");\r\n        x = arg0.getX();\r\n        y = arg0.getY();\r\n\r\n        virtuellerBildschirm.add(new Grafikobjekt(new Point(x, y), (int) linienstaerke.getValue()));\r\n\r\n        panel.repaint();\r\n      }\r\n    });\r\n\r\n    panel.addMouseListener(new MouseAdapter() {\r\n      public void mousePressed(MouseEvent arg0) {\r\n        System.out.println(\"Pressed\");\r\n        x = arg0.getX();\r\n        y = arg0.getY();\r\n\r\n        virtuellerBildschirm.add(new Grafikobjekt(new Point(x, y), (int) linienstaerke.getValue()));\r\n\r\n        panel.repaint();\r\n      }\r\n    });\r\n\r\n  }\r\n\r\n  private void sichtbar() {\r\n    this.setVisible(true);\r\n\r\n  }\r\n\r\n  @Override\r\n  public void stateChanged(ChangeEvent arg0) {\r\n    System.out.println(\"Spinner bet\u00e4tigt\");\r\n  }\r\n\r\n}\r\n\r\nclass Grafikobjekt {\r\n\r\n  Point koordinaten;\r\n  int stiftdicke;\r\n\r\n  public Grafikobjekt(Point p, int sd) {\r\n    this.koordinaten = p;\r\n    this.stiftdicke = sd;\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}\r\n<\/pre>\n<p>In Zeile 25 setzen wir statt Point unser Grafikobjekt ein.<br \/>\nIn 29 und 30 deklarieren wir einen JSpinner und eine JToolBar da wir noch weitere &#8218;Auswahlwerkzeuge&#8216; hinzuf\u00fcgen wollen und die JToolBar ein Container ist, der diese Werkzeuge ordnet.<br \/>\nIn Zeile 45 &#8211; 48 initsialisieren wir die JToolBar und setzen die bevorzugte Gr\u00f6\u00dfe. Au\u00dferdem ob die Toolbar abkoppelbar (true) oder nicht (false) sein soll. Anschlie\u00dfend setzen wir sie auf den Frame (Zeile 43). <code>BorderLayout.PAGE_START<\/code> sorgt daf\u00fcr das sie oben festgesetzt wird.<\/p>\n<p>In Zeile 50 bis 55 wird Ein SpinnerNumberModel erstellt das die Grenz- und Initialwerte des Spinners festlegt. Danach wird der Spinner mit dem Model initialisiert (Zeile 52) und die Minimum und Maximumgr\u00f6\u00dfe festgelegt.<\/p>\n<p>In Zeile 88 und 100 wird dann in einer einzigen Zeile das Grafikobjekt erstellt und initialisiert.<br \/>\nlinienstaerke ist ein Objekt das aus der Klasse JSpinner gebildet wurde und erbt daher alle Methoden von JSpinner. Da die Methode getValue der Klasse Spinner ein Objekt zur\u00fcckgibt das den aktuellen Wert von unserem Spinner enth\u00e4lt, m\u00fcssen wir dieses Objekt sozusagen verkleinern um den reinen Zahlenwert zu erhalten. Dies geschieht mit einem Cast. Indem wir einfach den Zieldatentyp in Klammern davor eingeben. Also <code>(int)<\/code>.<\/p>\n<p>In der for-Schleife (Zeile 66 bis 69 ) werden dann in unserer bekannten for-Schleife die Zahlen der einzelnen Grafikobjekte unseres virtuellen Bildschirms \u00fcber die getter ausgelesen.<\/p>\n<p>Jetzt wollen wir unsere Auswahlleiste mit weiteren Buttons bef\u00fcllen und au\u00dferdem eine zweite JToolBar erstellen die vertikal ausgerichtet ist und dort unsere ersten Werkzuge wie Pinsel, Radiergummi und Farbw\u00e4hler verankern.<\/p>\n<p>Wie wir sicherlich bemerkt haben, wird der Quellcode durch das Hinzuf\u00fcgen von Komponenten recht schnell gr\u00f6\u00dfer und dadurch un\u00fcbersichtlicher. Deshalb werden wir zuerst unsere Zeichenfl\u00e4che zu einem extra Objekt machen. Dadurch trennen wir den JFrame mit den zwei Werkzeugleisten und die Zeichenfl\u00e4che in zwei logische Einheiten auf.<\/p>\n<p>Fangen wir im n\u00e4chsten Kapitel damit an.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit unserem eigenem Objekt k\u00f6nnen wir eine Vielzahl von n\u00fctzlichen Funktionen f\u00fcr unser Zeichenprogramm umsetzen. Zun\u00e4chst wollen wir uns jedoch erst mit der Grundstruktur besch\u00e4ftigen: class Grafikobjekt { Point koordinaten; int stiftdicke; public Grafikobjekt(Point p, int sd) { this.koordinaten = p; this.stiftdicke = sd; } } Neben den zwei deklarierten Variablen brauchen wir nur noch [&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\/474"}],"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=474"}],"version-history":[{"count":6,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/474\/revisions"}],"predecessor-version":[{"id":836,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/posts\/474\/revisions\/836"}],"wp:attachment":[{"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/media?parent=474"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/categories?post=474"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/freizone.net\/java-einfach-lernen\/wp-json\/wp\/v2\/tags?post=474"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}