From 132b8c35d56f070133df212c79a709355543de06 Mon Sep 17 00:00:00 2001 From: Jan <> Date: Sun, 23 Jun 2019 14:54:19 +0200 Subject: [PATCH] . --- Garten/src/garten/model/Gaertner.java | 138 +++++++---- Garten/src/garten/model/Garten.java | 224 +++++++++++------- Garten/src/garten/model/Pflanze1.java | 7 +- Garten/src/garten/model/Pflanze2.java | 6 +- Garten/src/garten/model/Pflanze3.java | 6 +- Garten/src/garten/model/PflanzeImpl.java | 36 ++- Garten/src/garten/model/Pflanzengruppe.java | 19 +- .../model/PflanzengruppenKonfigurator.java | 63 +++-- Garten/src/garten/start.java | 13 +- Garten/src/garten/view/Fenster.java | 174 +++++++++++++- Garten/src/garten/view/FlaecheBeet.java | 7 +- Garten/src/garten/view/FlaechePflanzen.java | 6 + Garten/src/garten/view/FlaecheWeg.java | 4 + Garten/src/garten/view/GUI.form | 145 ++++++++++++ Garten/src/garten/view/GUI.java | 161 +++++++++++++ 15 files changed, 799 insertions(+), 210 deletions(-) create mode 100644 Garten/src/garten/view/GUI.form create mode 100644 Garten/src/garten/view/GUI.java diff --git a/Garten/src/garten/model/Gaertner.java b/Garten/src/garten/model/Gaertner.java index 4d4d2f1..ce4daa3 100644 --- a/Garten/src/garten/model/Gaertner.java +++ b/Garten/src/garten/model/Gaertner.java @@ -14,7 +14,9 @@ import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; -import java.util.ArrayList; +import javax.security.auth.callback.ConfirmationCallback; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; /** * @@ -25,12 +27,12 @@ public class Gaertner implements MouseMotionListener, MouseListener, { private Garten meinGarten; private Fenster fenster; - private FlaecheBeet flbeet; - private FlaecheWeg flweg; - private FlaechePflanzen flpfl; private boolean pflanzebewegt; - private ArrayList pflanzen; - private ArrayList beete; + private boolean gartenexistiert; + private boolean bepflanzungexistiert; + private Beet bepflanzeBeet; + + MouseEvent koordinbeet; //x,y Koordinaten reichen eigentlich Pflanze1 pfl1; Pflanze2 pfl2; @@ -38,54 +40,14 @@ public class Gaertner implements MouseMotionListener, MouseListener, int height; int width; - int[] randomwertex; - int[] randomwertey; - public Gaertner(Fenster fenster, FlaecheBeet flbeet, FlaecheWeg flweg, FlaechePflanzen flpfl) { meinGarten = new Garten(flbeet, flweg, flpfl); this.fenster = fenster; //Zur späteren Steuerung Pop up usw. - this.flpfl = flpfl; - - pflanzen = new ArrayList<>(); - beete = new ArrayList<>(); - pflanzebewegt = false; - //Initialisierung der Wege/Beete - height = fenster.getHeight(); - width = fenster.getWidth(); - randomwertex = new int[4]; - randomwertey = new int[4]; - randomwertex[0] = 10; - randomwertey[0] = 10; - randomwertex[3] = width - 50; - randomwertey[3] = height - 50; - - for (int i = 1; i < 3; i++) //erstelle Random Punkte für Wege + Beete - { - int wegendex = (int) (Math.random() * (170 * i) + (200 * i)); - int wegendey = (int) (Math.random() * (170 * i) + (200 * i)); - randomwertex[i] = wegendex; - randomwertey[i] = wegendey; - } - - for (int i = 0; i < randomwertex.length; i++) //Garten Wege hinzufügen - { - meinGarten.hinzufuegenWeg(randomwertex[i], randomwertey[0], randomwertex[i], randomwertey[3]); - meinGarten.hinzufuegenWeg(randomwertex[0], randomwertey[i], randomwertex[3], randomwertey[i]); - } - for (int i = 0; i < randomwertex.length - 1; i++) //Garten Beete hinzufügen - { - for (int j = 0; j < randomwertey.length - 1; j++) - { - meinGarten.hinzufuegenBeet(randomwertex[i] + 10, randomwertey[j] + 10, randomwertex[i + 1] - randomwertex[i] - 20, randomwertey[j + 1] - randomwertey[j] - 20); - } - } - meinGarten.zeichneWeg(); - meinGarten.zeichneBeete(); - meinGarten.randomBepflanzung(); - meinGarten.zeichnePflanzen(); + gartenexistiert = false; + bepflanzungexistiert = false; } @@ -93,17 +55,38 @@ public class Gaertner implements MouseMotionListener, MouseListener, { fenster.addMouseListener(this); fenster.addMouseMotionListener(this); + + fenster.getMnGartenanlegen().addActionListener(this); + fenster.getMnRandomPflanzenanlegen().addActionListener(this); + + fenster.getMnbepflanzen1().addActionListener(this); + fenster.getMnbepflanzen2().addActionListener(this); + fenster.getMnbepflanzen3().addActionListener(this); + + fenster.getBtnbepfl1().addActionListener(this); + fenster.getBtnbepfl2().addActionListener(this); + fenster.getBtnbepfl3().addActionListener(this); + } @Override public void mouseClicked(MouseEvent e) { - + if (SwingUtilities.isRightMouseButton(e))//Bei Rechtsklick Popup Menü + { + koordinbeet =e; //abspeichern wegen koordinaten zur weiterverarbeitung + fenster.showPoPup(e); + } + else + { + fenster.hidePopup(); + } } @Override public void mousePressed(MouseEvent e) { + } @Override @@ -125,27 +108,82 @@ public class Gaertner implements MouseMotionListener, MouseListener, @Override public void mouseExited(MouseEvent e) { + } @Override public void actionPerformed(ActionEvent e) { + Object key = e.getSource(); + if (key.equals(fenster.getMnGartenanlegen())) //Garten anlegen + { + if (gartenexistiert == false) + { + meinGarten.erstelleGarten(); + gartenexistiert = true; + } + else //Falls schon angelegt nachfragen ob neu anlegen + { + if (JOptionPane.showConfirmDialog(fenster, "Garten neu anlegen?", "Info", JOptionPane.YES_NO_OPTION) == ConfirmationCallback.YES) + { + meinGarten.löscheGarten(); + meinGarten.erstelleGarten(); + gartenexistiert = true; + bepflanzungexistiert = false; + } + } + } + else if (key.equals(fenster.getMnRandomPflanzenanlegen())) //Garten Random Bepflanzen + { + if (gartenexistiert == true && bepflanzungexistiert == false) //falls garten existiert bepflanzen + { + if (meinGarten.randomBepflanzung() == true) + { + bepflanzungexistiert = true; + } + else + { + JOptionPane.showConfirmDialog(null, + "Beet war leider für eine Pflanzengruppe zu klein", "Info", JOptionPane.DEFAULT_OPTION); + } + } + else if (gartenexistiert == true && bepflanzungexistiert == true)//falls schon ein teil bepflanzt + { + if (JOptionPane.showConfirmDialog(fenster, "Beete neu bepflanzen?", "Info?", JOptionPane.YES_NO_OPTION) == ConfirmationCallback.YES) + { + meinGarten.löscheBepflanzung(); + meinGarten.randomBepflanzung(); + bepflanzungexistiert = true; + } + } + else + { + JOptionPane.showConfirmDialog(fenster, "Erst muss ein Garten angelegt werden", "Info", JOptionPane.DEFAULT_OPTION); + } + } + else if (key.equals(fenster.getBtnbepfl1()) || key.equals(fenster.getBtnbepfl2()) ||key.equals(fenster.getBtnbepfl3())) + { + + } } @Override public void mouseDragged(MouseEvent e) { + fenster.hidePopup(); if (pflanzebewegt == false) - { + { if (meinGarten.getmovePflanze(e) != null) { pflanzebewegt = true; } } + } @Override public void mouseMoved(MouseEvent e) { } + } diff --git a/Garten/src/garten/model/Garten.java b/Garten/src/garten/model/Garten.java index 4b32e29..9cb0864 100644 --- a/Garten/src/garten/model/Garten.java +++ b/Garten/src/garten/model/Garten.java @@ -20,7 +20,8 @@ public class Garten extends Kompositum private ArrayList wege; private ArrayList beete; private ArrayList pflanzen; - + + private Pflanze pfl; private Pflanze1 pfl1; private Pflanze2 pfl2; private Pflanze3 pfl3; @@ -29,128 +30,211 @@ public class Garten extends Kompositum FlaecheWeg flweg; FlaechePflanzen flpfl; - public Garten(FlaecheBeet flbeet,FlaecheWeg flweg,FlaechePflanzen flpfl) + public Garten(FlaecheBeet flbeet, FlaecheWeg flweg, FlaechePflanzen flpfl) { wege = new ArrayList(); beete = new ArrayList(); pflanzen = new ArrayList(); - + this.flbeet = flbeet; this.flweg = flweg; this.flpfl = flpfl; } + //Funktionen Beete public void hinzufuegenBeet(int x, int y, int a, int b) { Beet neuesBeet = new Beet(x, y, a, b); beete.add(neuesBeet); } + public ArrayList getBeete() { return beete; } + public void zeichneBeete() { flbeet.zeichneBeete(beete); } - //Funktionen Wege + /* + public int getBeet(MouseEvent e) + { + Beet tempBeet; + for (Beet b : beete) + { + tempBeet = b; + } + + //return tempBeet; + } + //Funktionen Wege +*/ public void hinzufuegenWeg(int sx, int sy, int ex, int ey) { Weg neuerWeg = new Weg(sx, sy, ex, ey); wege.add(neuerWeg); } + public void zeichneWeg() { flweg.zeichneWeg(wege); } + //Funktionen Pflanzen public void hinzufuegenPflanze(Pflanze pflanze) { pflanzen.add(pflanze); } + public void zeichnePflanzen() { flpfl.setPflanzen(pflanzen); } - public void randomBepflanzung() + + public Boolean randomBepflanzung() { for (Beet b : beete) { - int randomAlter = (int) (Math.random() * 3 + 1); - int randomTyp = (int) (Math.random() * 3 + 1); - Boolean bepflanzung = true; - Boolean versetzt = true; - int[] temp = b.getKoordinaten(); - - int tempx = temp[0]+10; - int tempy = temp[1]+20; - int tempxrand = temp[2] + temp[0]; - int tempyrand = temp[3] + temp[1]; - - int deltax = (temp[2]-40)/((temp[2]-40)/40); - int deltay = (temp[3]-40)/((temp[3]-40)/50); - - do + try { - if (randomTyp == 1) + + int randomAlter = (int) (Math.random() * 3 + 1); + int randomTyp = (int) (Math.random() * 3 + 1); + Boolean bepflanzung = true; + Boolean versetzt = true; + int[] temp = b.getKoordinaten(); + + int tempx = temp[0] + 10; + int tempy = temp[1] + 20; + int tempxrand = temp[2] + temp[0]; + int tempyrand = temp[3] + temp[1]; + + int deltax = (temp[2] - 40) / ((temp[2] - 40) / 40); + int deltay = (temp[3] - 40) / ((temp[3] - 40) / 50); + do { - pfl1 = new Pflanze1(tempx, tempy, randomAlter); - hinzufuegenPflanze(pfl1); - } - else if (randomTyp == 2) - { - pfl2 = new Pflanze2(tempx, tempy, randomAlter); - hinzufuegenPflanze(pfl2); - } - else if (randomTyp == 3) - { - pfl3 = new Pflanze3(tempx, tempy, randomAlter); - hinzufuegenPflanze(pfl3); - } - tempx += deltax; - if (tempx > tempxrand ) - { - if (versetzt) + if (randomTyp == 1) { - tempx = temp[0]+30; - versetzt = false; + pfl1 = new Pflanze1(tempx, tempy, randomAlter,20); + float[] tempbound = pfl1.getBoundingBoxes(); + System.out.println("Bounding Boxes: " + tempbound[0] + " " + tempbound[1] + " " + tempbound[2] + " " + tempbound[3]); + hinzufuegenPflanze(pfl1); } - else + else if (randomTyp == 2) { - tempx = temp[0]+20; - versetzt = true; + pfl2 = new Pflanze2(tempx, tempy, randomAlter,15); + hinzufuegenPflanze(pfl2); + } + else if (randomTyp == 3) + { + pfl3 = new Pflanze3(tempx, tempy, randomAlter,10); + hinzufuegenPflanze(pfl3); + } + tempx += deltax; + if (tempx > tempxrand) + { + if (versetzt) + { + tempx = temp[0] + 30; + versetzt = false; + } + else + { + tempx = temp[0] + 20; + versetzt = true; + } + tempy += deltay; + } + if (tempy > tempyrand) + { + bepflanzung = false; } - tempy += deltay; - } - if (tempy > tempyrand) - { - bepflanzung = false; } + while (bepflanzung); + } + catch (ArithmeticException e) + { + pflanzen.removeAll(pflanzen); + return false; } - while (bepflanzung); } - + zeichnePflanzen(); + return true; } - + + public void löscheBepflanzung() + { + pflanzen.removeAll(pflanzen); + flpfl.löschePflanzen(); + } + + public void erstelleGarten() + { + int height = flbeet.getHeight(); + int width = flbeet.getWidth(); + int[] randomwertex = new int[4]; + int[] randomwertey = new int[4]; + randomwertex[0] = 10; + randomwertey[0] = 10; + randomwertex[3] = width - 50; + randomwertey[3] = height - 50; + + for (int i = 1; i < 3; i++) //erstelle Random Punkte für Wege + Beete + { + int wegendex = (int) (Math.random() * (170 * i) + (200 * i)); + int wegendey = (int) (Math.random() * (170 * i) + (200 * i)); + randomwertex[i] = wegendex; + randomwertey[i] = wegendey; + } + + for (int i = 0; i < randomwertex.length; i++) //Garten Wege hinzufügen + { + hinzufuegenWeg(randomwertex[i], randomwertey[0], randomwertex[i], randomwertey[3]); + hinzufuegenWeg(randomwertex[0], randomwertey[i], randomwertex[3], randomwertey[i]); + } + for (int i = 0; i < randomwertex.length - 1; i++) //Garten Beete hinzufügen + { + for (int j = 0; j < randomwertey.length - 1; j++) + { + hinzufuegenBeet(randomwertex[i] + 10, randomwertey[j] + 10, randomwertex[i + 1] - randomwertex[i] - 20, randomwertey[j + 1] - randomwertey[j] - 20); + } + } + zeichneWeg(); + zeichneBeete(); + } + + public void löscheGarten() + { + wege.removeAll(wege); + beete.removeAll(beete); + pflanzen.removeAll(pflanzen); + flpfl.löschePflanzen(); + flbeet.löscheBeete(); + flweg.löscheWeg(); + } + public Pflanze getmovePflanze(MouseEvent e) { Pflanze diePflanze = null; int abstand = 30; - for(int i = 0; i< pflanzen.size();i++) + for (int i = 0; i < pflanzen.size(); i++) { - - if( Math.abs(pflanzen.get(i).getPositionx()-e.getX()) + Math.abs(pflanzen.get(i).getPositiony()-e.getY()) < abstand) + + if (Math.abs(pflanzen.get(i).getPositionx() - e.getX()) + Math.abs(pflanzen.get(i).getPositiony() - e.getY()) < abstand) { diePflanze = pflanzen.get(i); - abstand = Math.abs(pflanzen.get(i).getPositionx()-e.getX()) + Math.abs(pflanzen.get(i).getPositiony()-e.getY()); - System.out.println("Pflanze: " +diePflanze.getPositionx() + " " + diePflanze.getPositiony()); + abstand = Math.abs(pflanzen.get(i).getPositionx() - e.getX()) + Math.abs(pflanzen.get(i).getPositiony() - e.getY()); + System.out.println("Pflanze: " + diePflanze.getPositionx() + " " + diePflanze.getPositiony()); + intmovePflanze = i; - System.out.println("Alte Position: "+pflanzen.get(intmovePflanze).getPositionx() + " " +pflanzen.get(intmovePflanze).getPositiony()); + System.out.println("Alte Position: " + pflanzen.get(intmovePflanze).getPositionx() + " " + pflanzen.get(intmovePflanze).getPositiony()); } } return diePflanze; } + public void setmovePflanze(MouseEvent e) { pflanzen.get(intmovePflanze).setPositionx(e.getX()); @@ -158,29 +242,5 @@ public class Garten extends Kompositum pflanzen.get(intmovePflanze).setAlgorithm(); zeichnePflanzen(); } - /* - public Pflanze naechstePflanze(int x, int y) - { - Pflanze diePflanze = null; - int abstand = 1000; - for(int i = 0; i < pflanzen.size(); i++) - { - if(pflanzen.get(i).getPositionx()-x + pflanzen.get(i).getPositiony()-y < abstand) - { - diePflanze = pflanzen.get(i); - abstand = Math.abs(x-pflanzen.get(i).getPositionx()) + Math.abs(y-pflanzen.get(i).getPositiony()) ; - print(pflanzen.get(i).getPositionx()); - print(pflanzen.get(i).getPositiony()); - } - } - if(abstand < 20) - { - return diePflanze; - } - else - { - return null; - } - } -*/ + } diff --git a/Garten/src/garten/model/Pflanze1.java b/Garten/src/garten/model/Pflanze1.java index 940de55..01cc077 100644 --- a/Garten/src/garten/model/Pflanze1.java +++ b/Garten/src/garten/model/Pflanze1.java @@ -14,11 +14,10 @@ import lsystem.StochasticGrammar; class Pflanze1 extends PflanzeImpl { - Pflanze1(int Xstart, int Ystart, int Generation) + Pflanze1(int Xstart, int Ystart, int Generation,int startLength)//30-50, Generations 3 { - super(Xstart,Ystart,Generation); + super(Xstart,Ystart,Generation,startLength); DELTA = (float) ((Math.PI)/10); - startLength = 30; createLSystem(); translateRules(); } @@ -29,6 +28,6 @@ class Pflanze1 extends PflanzeImpl grammar.addRule('F',"F[+F]F", (float) 0.45); grammar.addRule('F',"F[-F]F", (float) 0.45); grammar.generateGrammar(generations); - drawLength =(float) (startLength * Math.pow(0.7, (double) generations)); + drawLength =(float) (startLength * Math.pow(0.6, (double) generations)); } } diff --git a/Garten/src/garten/model/Pflanze2.java b/Garten/src/garten/model/Pflanze2.java index fa536a0..d1c05ae 100644 --- a/Garten/src/garten/model/Pflanze2.java +++ b/Garten/src/garten/model/Pflanze2.java @@ -14,12 +14,10 @@ import lsystem.StochasticGrammar; class Pflanze2 extends PflanzeImpl { - Pflanze2(int Xstart, int Ystart, int Generation) + Pflanze2(int Xstart, int Ystart, int Generation,int startLength)//startLength 10-20 (Verzweigte Pflanze)3 Generationen { - super(Xstart,Ystart,Generation); - + super(Xstart,Ystart,Generation,startLength); DELTA = (float) ((Math.PI)/5); - startLength = 10; createLSystem(); translateRules(); } diff --git a/Garten/src/garten/model/Pflanze3.java b/Garten/src/garten/model/Pflanze3.java index 3eb8e85..c8fcee1 100644 --- a/Garten/src/garten/model/Pflanze3.java +++ b/Garten/src/garten/model/Pflanze3.java @@ -14,12 +14,10 @@ import lsystem.StochasticGrammar; class Pflanze3 extends PflanzeImpl { - Pflanze3(int Xstart, int Ystart, int Generation) + Pflanze3(int Xstart, int Ystart, int Generation,int startLength) //Unkraut 10-20, 4 Generations { - super(Xstart,Ystart,Generation); - + super(Xstart,Ystart,Generation,startLength); DELTA = (float) ((Math.PI)/5); - startLength = 10; createLSystem(); translateRules(); } diff --git a/Garten/src/garten/model/PflanzeImpl.java b/Garten/src/garten/model/PflanzeImpl.java index 6d73022..29011ff 100644 --- a/Garten/src/garten/model/PflanzeImpl.java +++ b/Garten/src/garten/model/PflanzeImpl.java @@ -11,6 +11,7 @@ package garten.model; */ import java.text.CharacterIterator; import java.util.ArrayList; +import java.util.Collections; import javax.swing.JComponent; import lsystem.Grammar; import lsystem.collection.TurtleStack; @@ -34,16 +35,24 @@ public class PflanzeImpl extends JComponent implements Pflanze protected int positiony; protected int flaeche; + + protected float[] boundingBoxes; + ArrayList tempx; + ArrayList tempy; //Position(); TurtleStack ts; - public PflanzeImpl(int Xstart, int Ystart, int Generation) + public PflanzeImpl(int xstart, int ystart, int generation, int startLength) { - positionx = Xstart; - positiony = Ystart; - generations = Generation; + this.positionx = xstart; + this.positiony = ystart; + this.generations = generation; + this.startLength = startLength; pts = new ArrayList(); ts = new TurtleStack(); + boundingBoxes=new float[4]; //minx, miny, maxx, maxy + tempx = new ArrayList<>(); + tempy = new ArrayList<>(); } public void translateRules() @@ -65,7 +74,13 @@ public class PflanzeImpl extends JComponent implements Pflanze { x_temp, y_temp, turtle.getX(), turtle.getY() }; + tempx.add(x_temp); + tempx.add(turtle.getX()); + tempy.add(y_temp); + tempy.add(turtle.getY()); + pts.add(temp); + break; case '+': turtle.setTheta(turtle.getTheta() + DELTA); @@ -83,12 +98,25 @@ public class PflanzeImpl extends JComponent implements Pflanze System.err.println("character " + ch + " not in grammar"); } } + setBoundingBoxes(); + } + void setBoundingBoxes() + { + boundingBoxes[0] = Collections.min(tempx); + boundingBoxes[1] = Collections.min(tempy); + boundingBoxes[2] = Collections.max(tempx); + boundingBoxes[3] = Collections.max(tempy); + } + public float [] getBoundingBoxes() + { + return boundingBoxes; } @Override public ArrayList getPoints() { + return pts; } diff --git a/Garten/src/garten/model/Pflanzengruppe.java b/Garten/src/garten/model/Pflanzengruppe.java index 35d15fb..5d2f138 100644 --- a/Garten/src/garten/model/Pflanzengruppe.java +++ b/Garten/src/garten/model/Pflanzengruppe.java @@ -14,19 +14,18 @@ class Pflanzengruppe { private int alter; private int pflanzentyp; + private int startlaenge; + + Pflanze1 pfl1; + Pflanze2 pfl2; + Pflanze3 pfl3; - - private int anzahlPflanzen = 1; - - - //Pflanze[] Pflanzengruppe = new Pflanze[anzahlPflanzen]; - - Pflanzengruppe(int Alter,int PflanzenTyp,int AnzahlPflanzen) + Pflanzengruppe(int pflanzenTyp,int alter, int startlaenge) { - alter = Alter; - pflanzentyp = PflanzenTyp; - anzahlPflanzen = AnzahlPflanzen; + this.alter = alter; + this.pflanzentyp = pflanzenTyp; + this.startlaenge = startlaenge; } public void anzeigen() { diff --git a/Garten/src/garten/model/PflanzengruppenKonfigurator.java b/Garten/src/garten/model/PflanzengruppenKonfigurator.java index 903a34b..25a1dac 100644 --- a/Garten/src/garten/model/PflanzengruppenKonfigurator.java +++ b/Garten/src/garten/model/PflanzengruppenKonfigurator.java @@ -13,53 +13,52 @@ package garten.model; class PflanzengruppenKonfigurator { private int alter = 1; - private int pflanzenTyp = 1; - private int anzahlPflanzen = 1; + private int pflanzenTyp =1; + private int startlaenge =1; public PflanzengruppenKonfigurator() { } - - public PflanzengruppenKonfigurator alter(int Alter) - { - this.alter = Alter; - return this; - } - - public PflanzengruppenKonfigurator pflanzenTyp(int PflanzenTyp) - { - this.pflanzenTyp = PflanzenTyp; - return this; - } - - public PflanzengruppenKonfigurator anzahlPflanzen(int AnzahlPflanzen) - { - this.anzahlPflanzen = AnzahlPflanzen; - return this; - } - - - public void setanzPflanzen(int tempanz) - { - anzahlPflanzen=tempanz; - } - - public Pflanzengruppe erstellen() throws IllegalArgumentException + public Pflanzengruppe erstellen() throws IllegalArgumentException { konfigurationPruefen(); - Pflanzengruppe pflgruppe = new Pflanzengruppe(alter,pflanzenTyp,anzahlPflanzen); + Pflanzengruppe pflgruppe = new Pflanzengruppe(pflanzenTyp,alter,startlaenge); return pflgruppe; } + + public PflanzengruppenKonfigurator alter(int alter) + { + this.alter = alter; + return this; + } + + public PflanzengruppenKonfigurator pflanzenTyp(int pflanzenTyp) + { + this.pflanzenTyp = pflanzenTyp; + return this; + } + + public PflanzengruppenKonfigurator startlaenge(int startlaenge) + { + this.startlaenge = startlaenge; + return this; + } + private void konfigurationPruefen() throws IllegalArgumentException { - if((this.pflanzenTyp ==2 ||this.pflanzenTyp ==3 )&& alter > 4) + if((pflanzenTyp ==1 || pflanzenTyp ==2) && alter > 3|| pflanzenTyp ==3 && alter > 4) { throw new IllegalArgumentException("Ein geringeres Alter muss gewählt werden"); } - if(this.pflanzenTyp ==1 && alter > 5) + if(pflanzenTyp ==1 && (startlaenge < 30 || startlaenge >50)) { - throw new IllegalArgumentException("Ein geringeres Alter muss gewählt werden"); + throw new IllegalArgumentException("Größe muss zwischen 30-50 liegen"); + } + if((pflanzenTyp ==2 || pflanzenTyp ==3) && (startlaenge <10 || startlaenge >20)) + { + throw new IllegalArgumentException("Größe muss zwischen 10-20 liegen"); + } } diff --git a/Garten/src/garten/start.java b/Garten/src/garten/start.java index bb0689b..b901b35 100644 --- a/Garten/src/garten/start.java +++ b/Garten/src/garten/start.java @@ -23,24 +23,25 @@ public class start { public start() { - Color hintergrund = new Color(34, 139, 34); - Fenster view = new Fenster(); + + FlaecheBeet flbeet = new FlaecheBeet(); FlaecheWeg flweg = new FlaecheWeg(); FlaechePflanzen flpflanzen = new FlaechePflanzen(); + Fenster view = new Fenster(); flpflanzen.setOpaque(false); - flweg.setOpaque(false); flbeet.setOpaque(false); - - + flbeet.setComponentPopupMenu(view.getPopup()); + flweg.setOpaque(false); Container hauptkiste = view.getContentPane(); + hauptkiste.setLayout(new OverlayLayout(hauptkiste)); hauptkiste.setBackground(hintergrund); hauptkiste.add(flpflanzen); hauptkiste.add(flbeet); hauptkiste.add(flweg); - + Gaertner ga = new Gaertner(view,flbeet,flweg,flpflanzen); ga.registerEvents(); } diff --git a/Garten/src/garten/view/Fenster.java b/Garten/src/garten/view/Fenster.java index b21e267..6702de0 100644 --- a/Garten/src/garten/view/Fenster.java +++ b/Garten/src/garten/view/Fenster.java @@ -5,7 +5,15 @@ */ package garten.view; +import java.awt.MouseInfo; +import java.awt.event.MouseEvent; +import javax.swing.ButtonGroup; +import javax.swing.JButton; import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; +import javax.swing.JRadioButton; /** * @@ -13,22 +21,114 @@ import javax.swing.JFrame; */ public class Fenster extends JFrame { - + JPopupMenu popup; + JMenu mnbepflanzen1; + JMenu mnbepflanzen2; + JMenu mnbepflanzen3; + JMenuItem mnGartenanlegen; + JMenuItem mnRandomPflanzenanlegen; + + JButton btnbepfl1; + JButton btnbepfl2; + JButton btnbepfl3; + + JRadioButton radiobtn1pfl1; + JRadioButton radiobtn2pfl1; + JRadioButton radiobtn3pfl1; + JRadioButton radiobtn4pfl1; + + JRadioButton radiobtn1pfl2; + JRadioButton radiobtn2pfl2; + JRadioButton radiobtn3pfl2; + JRadioButton radiobtn4pfl2; + + JRadioButton radiobtn1pfl3; + JRadioButton radiobtn2pfl3; + JRadioButton radiobtn3pfl3; + JRadioButton radiobtn4pfl3; + public Fenster() { - - /* - JPopupMenu popup = new JPopupMenu(); - JMenuItem menuItem = new JMenuItem("Hallo"); - JRadioButtonMenuItem radioButtonItem = new JRadioButtonMenuItem("Ich bin ein JRadionButtonMenuItem",true); - popup.add(menuItem); - popup.add(radioButtonItem); - popup.setLocation(200,200); - popup.setVisible(true); - JPopupMenu.setDefaultLightWeightPopupEnabled(false); - popup.setVisible(true); - */ + //PoPupMenü + popup = new JPopupMenu(); + + mnGartenanlegen = new JMenuItem("Garten anlegen"); + mnRandomPflanzenanlegen = new JMenuItem("Random Bepflanzung"); + + popup.add(mnGartenanlegen); + popup.addSeparator(); + popup.add(mnRandomPflanzenanlegen); + popup.addSeparator(); + + //PopUpmenü Pflanze 1 + mnbepflanzen1 = new JMenu("Bepflanze mit Pflanze1"); + btnbepfl1 = new JButton("Bepflanzen"); + radiobtn1pfl1 = new JRadioButton("1 Jahr alt"); + radiobtn2pfl1 = new JRadioButton("2 Jahre alt"); + radiobtn3pfl1= new JRadioButton("3 Jahre alt"); + radiobtn4pfl1 = new JRadioButton("4 Jahre alt"); + //Btn Gruppe Pflanz1 + ButtonGroup radiobtngrp1 = new ButtonGroup(); + radiobtngrp1.add(radiobtn1pfl1); + radiobtngrp1.add(radiobtn2pfl1); + radiobtngrp1.add(radiobtn3pfl1); + radiobtngrp1.add(radiobtn4pfl1); + //Alle Elemente zu PopUpmenü Pflanze 1 hinzufügen + mnbepflanzen1.add(radiobtn1pfl1); + mnbepflanzen1.add(radiobtn2pfl1); + mnbepflanzen1.add(radiobtn3pfl1); + mnbepflanzen1.add(radiobtn4pfl1); + mnbepflanzen1.add(btnbepfl1); + + //PopUpmenü Pflanze 2 + mnbepflanzen2 = new JMenu("Bepflanze mit Pflanze2"); + btnbepfl2 = new JButton("Bepflanzen"); + radiobtn1pfl2 = new JRadioButton("1 Jahr alt"); + radiobtn2pfl2 = new JRadioButton("2 Jahre alt"); + radiobtn3pfl2= new JRadioButton("3 Jahre alt"); + radiobtn4pfl2= new JRadioButton("4 Jahre alt"); + //Btn Gruppe Pflanz2 + radiobtngrp1.add(radiobtn1pfl2); + radiobtngrp1.add(radiobtn2pfl2); + radiobtngrp1.add(radiobtn3pfl2); + radiobtngrp1.add(radiobtn4pfl2); + //Alle Elemente zu PopUpmenü Pflanze 2 hinzufügen + mnbepflanzen2.add(radiobtn1pfl2); + mnbepflanzen2.add(radiobtn2pfl2); + mnbepflanzen2.add(radiobtn3pfl2); + mnbepflanzen2.add(radiobtn4pfl2); + mnbepflanzen2.add(btnbepfl2); + + + //PopUpmenü Pflanze 3 + mnbepflanzen3 = new JMenu("Bepflanze mit Pflanze3"); + btnbepfl3 = new JButton("Bepflanzen"); + + radiobtn1pfl3 = new JRadioButton("1 Jahr alt"); + radiobtn2pfl3 = new JRadioButton("2 Jahre alt"); + radiobtn3pfl3= new JRadioButton("3 Jahre alt"); + radiobtn4pfl3= new JRadioButton("4 Jahre alt"); + //Btn Gruppe Pflanz3 + radiobtngrp1.add(radiobtn1pfl3); + radiobtngrp1.add(radiobtn2pfl3); + radiobtngrp1.add(radiobtn3pfl3); + radiobtngrp1.add(radiobtn4pfl3); + //Alle Elemente zu PopUpmenü Pflanze 3 hinzufügen + mnbepflanzen3.add(radiobtn1pfl3); + mnbepflanzen3.add(radiobtn2pfl3); + mnbepflanzen3.add(radiobtn3pfl3); + mnbepflanzen3.add(radiobtn4pfl3); + mnbepflanzen3.add(btnbepfl3); + + //Alle PopUpmenüs dem PoPup hinzufügen + popup.add(mnbepflanzen1); + popup.addSeparator(); + popup.add(mnbepflanzen2); + popup.addSeparator(); + popup.add(mnbepflanzen3); + + this.setTitle("Garten von Paul und Jan"); this.pack(); this.setDefaultCloseOperation(EXIT_ON_CLOSE); @@ -36,4 +136,52 @@ public class Fenster extends JFrame this.setVisible(true); } + + public void showPoPup(MouseEvent e) + { + popup.setLocation(MouseInfo.getPointerInfo().getLocation().x,MouseInfo.getPointerInfo().getLocation().y); + popup.setVisible(true); + } + public void hidePopup() + { + popup.setVisible(false); + } + public JPopupMenu getPopup() + { + return popup; + } + public JMenuItem getMnGartenanlegen() + { + return mnGartenanlegen; + } + public JMenuItem getMnRandomPflanzenanlegen() + { + return mnRandomPflanzenanlegen; + } + + public JMenu getMnbepflanzen1() + { + return mnbepflanzen1; + } + public JMenu getMnbepflanzen2() + { + return mnbepflanzen2; + } + public JMenu getMnbepflanzen3() + { + return mnbepflanzen3; + } + + public JButton getBtnbepfl1() + { + return btnbepfl1; + } + public JButton getBtnbepfl2() + { + return btnbepfl2; + } + public JButton getBtnbepfl3() + { + return btnbepfl2; + } } diff --git a/Garten/src/garten/view/FlaecheBeet.java b/Garten/src/garten/view/FlaecheBeet.java index 2d02975..1d7c449 100644 --- a/Garten/src/garten/view/FlaecheBeet.java +++ b/Garten/src/garten/view/FlaecheBeet.java @@ -18,7 +18,6 @@ import javax.swing.JPanel; public class FlaecheBeet extends JPanel { int[] temppunkte; - Color colorBeet; private ArrayList beete; @@ -44,7 +43,13 @@ public class FlaecheBeet extends JPanel public void zeichneBeete(ArrayList tempBeet) { + beete.addAll(0, tempBeet); repaint(); } + public void löscheBeete() + { + beete.removeAll(beete); + repaint(); + } } diff --git a/Garten/src/garten/view/FlaechePflanzen.java b/Garten/src/garten/view/FlaechePflanzen.java index 94170b5..5f66e7a 100644 --- a/Garten/src/garten/view/FlaechePflanzen.java +++ b/Garten/src/garten/view/FlaechePflanzen.java @@ -31,6 +31,7 @@ public class FlaechePflanzen extends JPanel pflanzen = new ArrayList<>(); Gerade = new Line2D.Float(); pinsel = new BasicStroke(1f); + } public void paintComponent(Graphics g) @@ -57,4 +58,9 @@ public class FlaechePflanzen extends JPanel pflanzen.addAll(0, temppflanzen); repaint(); } + public void löschePflanzen() + { + pflanzen.removeAll(pflanzen); + repaint(); + } } diff --git a/Garten/src/garten/view/FlaecheWeg.java b/Garten/src/garten/view/FlaecheWeg.java index 739a59a..ac63bb8 100644 --- a/Garten/src/garten/view/FlaecheWeg.java +++ b/Garten/src/garten/view/FlaecheWeg.java @@ -53,4 +53,8 @@ public class FlaecheWeg extends JPanel weg.addAll(0, tempWeg); repaint(); } + public void löscheWeg() + { + weg.removeAll(weg); + } } diff --git a/Garten/src/garten/view/GUI.form b/Garten/src/garten/view/GUI.form new file mode 100644 index 0000000..9fc02ae --- /dev/null +++ b/Garten/src/garten/view/GUI.form @@ -0,0 +1,145 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Garten/src/garten/view/GUI.java b/Garten/src/garten/view/GUI.java new file mode 100644 index 0000000..09c677e --- /dev/null +++ b/Garten/src/garten/view/GUI.java @@ -0,0 +1,161 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package garten.view; + +/** + * + * @author Jan + */ +public class GUI extends javax.swing.JFrame +{ + + /** + * Creates new form GUI + */ + public GUI() + { + initComponents(); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() + { + + mnPopup = new javax.swing.JPopupMenu(); + mnPflanze1 = new javax.swing.JMenu(); + radiobuttonpfl1 = new javax.swing.JRadioButtonMenuItem(); + jRadioButtonMenuItem1 = new javax.swing.JRadioButtonMenuItem(); + jRadioButtonMenuItem2 = new javax.swing.JRadioButtonMenuItem(); + mnPflanze2 = new javax.swing.JMenu(); + mnPflanze3 = new javax.swing.JMenu(); + jPanel1 = new javax.swing.JPanel(); + jMenuBar1 = new javax.swing.JMenuBar(); + jMenu1 = new javax.swing.JMenu(); + mnfunktionen = new javax.swing.JMenu(); + mnzeichneGarten = new javax.swing.JMenuItem(); + mnzeichneRandPflanzen = new javax.swing.JMenuItem(); + + mnPopup.setFocusable(false); + + mnPflanze1.setText("jMenu2"); + + radiobuttonpfl1.setSelected(true); + radiobuttonpfl1.setText("jRadioButtonMenuItem1"); + mnPflanze1.add(radiobuttonpfl1); + + jRadioButtonMenuItem1.setSelected(true); + jRadioButtonMenuItem1.setText("jRadioButtonMenuItem1"); + mnPflanze1.add(jRadioButtonMenuItem1); + + jRadioButtonMenuItem2.setSelected(true); + jRadioButtonMenuItem2.setText("jRadioButtonMenuItem2"); + mnPflanze1.add(jRadioButtonMenuItem2); + + mnPopup.add(mnPflanze1); + + mnPflanze2.setText("jMenu2"); + mnPopup.add(mnPflanze2); + + mnPflanze3.setText("jMenu2"); + mnPopup.add(mnPflanze3); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + + jPanel1.setBackground(new java.awt.Color(153, 255, 153)); + jPanel1.setComponentPopupMenu(mnPopup); + jPanel1.setOpaque(false); + jPanel1.setLayout(new javax.swing.OverlayLayout(jPanel1)); + getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); + + jMenu1.setText("File"); + jMenuBar1.add(jMenu1); + + mnfunktionen.setText("Funktionen"); + + mnzeichneGarten.setText("Garten anlegen"); + mnfunktionen.add(mnzeichneGarten); + + mnzeichneRandPflanzen.setText("Random Bepflanzung"); + mnfunktionen.add(mnzeichneRandPflanzen); + + jMenuBar1.add(mnfunktionen); + + setJMenuBar(jMenuBar1); + + pack(); + }// //GEN-END:initComponents + + /** + * @param args the command line arguments + */ + public static void main(String args[]) + { + /* Set the Nimbus look and feel */ + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try + { + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) + { + if ("Nimbus".equals(info.getName())) + { + javax.swing.UIManager.setLookAndFeel(info.getClassName()); + break; + } + } + } + catch (ClassNotFoundException ex) + { + java.util.logging.Logger.getLogger(GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + catch (InstantiationException ex) + { + java.util.logging.Logger.getLogger(GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + catch (IllegalAccessException ex) + { + java.util.logging.Logger.getLogger(GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + catch (javax.swing.UnsupportedLookAndFeelException ex) + { + java.util.logging.Logger.getLogger(GUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + // + + /* Create and display the form */ + java.awt.EventQueue.invokeLater(new Runnable() + { + public void run() + { + new GUI().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JMenu jMenu1; + private javax.swing.JMenuBar jMenuBar1; + private javax.swing.JPanel jPanel1; + private javax.swing.JRadioButtonMenuItem jRadioButtonMenuItem1; + private javax.swing.JRadioButtonMenuItem jRadioButtonMenuItem2; + private javax.swing.JMenu mnPflanze1; + private javax.swing.JMenu mnPflanze2; + private javax.swing.JMenu mnPflanze3; + private javax.swing.JPopupMenu mnPopup; + private javax.swing.JMenu mnfunktionen; + private javax.swing.JMenuItem mnzeichneGarten; + private javax.swing.JMenuItem mnzeichneRandPflanzen; + private javax.swing.JRadioButtonMenuItem radiobuttonpfl1; + // End of variables declaration//GEN-END:variables +}