From 4a460d84cd44b63721234633cd4950c305ed12c2 Mon Sep 17 00:00:00 2001 From: Zocker1999NET Date: Wed, 11 May 2016 21:33:36 +0200 Subject: [PATCH] =?UTF-8?q?GUI=20Objekte=20Version=200.2=20Funktionen=20te?= =?UTF-8?q?ilweise=20durch=20=C3=9Cberf=C3=BChrung=20in=20die=20GUI=5FInte?= =?UTF-8?q?rface-Klasse=20verallgemeinert=20InCode=20Dokumentation=20hinzu?= =?UTF-8?q?gef=C3=BCgt/angepasst=20Fehler=20verbessert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Button.java | 97 ++++++++++++++++++++++++++++++++++++---------- GUI_Interface.java | 76 +++++++++++++++++++++++++++++++----- Label.java | 86 ++++++++++++++++++++++++++++++++-------- 3 files changed, 212 insertions(+), 47 deletions(-) diff --git a/Button.java b/Button.java index 9d196df..ff18971 100644 --- a/Button.java +++ b/Button.java @@ -2,34 +2,44 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.awt.Color; /** - * Diese Klasse stellt einen Button dar. - * - * @author Felix Stupp - * @version 26.04.2016 - */ + Diese Klasse stellt einen Button dar. + Als Vorbild dafür hält der Button aus dem .NET-Framework für UWP-Apps dar. + + @author Felix Stupp + @version 11.05.2016 +*/ public class Button extends GUI_Interface { - boolean autoSize = true; - Color foreC = Color.WHITE; - Color backC = Color.BLACK; - int textSize = 32; // as default text size - String text = ""; + private boolean autoSize = true; + private int textSize = 32; // as default text size + private String text = ""; - ButtonEvent handler; + private ButtonEvent handler; + /** + Erstellt einen Button mit dem gegebenen Text und der zugehörigen Textgröße. + @param txt Der Text, den der Button darstellen soll. + @param size Die Textgröße, in der der Button den Text darstellen soll. + */ public Button(String txt, int size) { text = txt; textSize = size; redraw(); } /** - * Erstellt einen Button mit dem gegebenen Objekt als Event-Handler. - * @param h Der Handler mit dem Interface ButtonEvent implementiert. - */ + Erstellt einen Button mit dem gegebenen Objekt als Event-Handler. + @param h Der Handler mit dem Interface ButtonEvent implementiert. + */ public Button(ButtonEvent h) { handler = h; redraw(); } + /** + Erstellt einen Button mit dem gegebenen Text, der zugehörigen Textgröße und dem gegebenen Objekt als Event-Handler. + @param txt Der Text, den der Button darstellen soll. + @param size Die Textgröße, in der der Button den Text darstellen soll. + @param h Der Handler mit dem Interface ButtonEvent implementiert. + */ public Button(String txt, int size, ButtonEvent h) { text = txt; textSize = size; @@ -38,17 +48,27 @@ public class Button extends GUI_Interface { } /** - * Fragt ab, ob ein Klick auf den Button gekommen ist. - */ + Fragt ab, ob ein Klick auf den Button gekommen ist. + Wird intern von Greenfoot benötigt. + */ public void act() { if(Greenfoot.mouseClicked(this) && handler != this) { handler.buttonClicked(this); } } + /** + Gibt zurück, ob die Größe des Buttons von dem Text bestimmt werden soll. + @return Wert der AutoSize-Eigenschaft + */ public boolean getAutoSize() { return autoSize; } + /** + Legt fest, ob die Größe des Buttons von dem Text bestimmt werden soll. + Wird der Wert auf TRUE geändert, erfolgt automatisch ein Redraw des Objekts. + @param b Der neue Wert der AutoSize-Eigenschaft. + */ public void setAutoSize(boolean b) { autoSize = b; if(autoSize) { @@ -56,38 +76,74 @@ public class Button extends GUI_Interface { } } + /** + Gibt die aktelle Textgröße zurück. + @return Aktuelle Textgröße + */ public int getTextSize() { return textSize; } - public void setTextSize(int s) { + /** + Legt eine neue Textgröße fest. + @param s Neue Textgröße + @return Gibt an, ob sich die Textgröße geändert hat. Bei TRUE erfolgte bereits ein Redraw. + */ + public boolean setTextSize(int s) { if(textSize != s && s > 0) { textSize = s; redraw(); + return true; } + return false; } + /** + Gibt den aktuellen Text zurück. + @return Der aktuelle Text + */ public String getText() { return text; } - public void setText(String s) { + /** + Setzt den darzustellenden Text auf den neuen Wert. + @param s Der neue Text + @return Gibt an, ob sich der Text geändert hat. Bei TRUE erfolgte bereits ein Redraw. + */ + public boolean setText(String s) { if(text != s) { text = s; redraw(); + return true; } + return false; } + /** + Gibt den aktuellen EventHandler des Buttons zurück. + @return Der Handler als ButtonEvent + */ public ButtonEvent getHandler() { return handler; } + /** + Setzt den EventHandler auf ein neues Objekt. + @param h Der Handler mit implementiertem ButtonEvent-Interface + */ public void setHandler(ButtonEvent h) { handler = h; } + /** + Entfernt den aktuellen EventHandler, um die Ausführung zukünftiger Events zu verhindern. + */ public void removeHandler() { handler = null; } + /** + Zeichnet das GreenfootImage des Buttons erneut und zeigt es an. + */ public void redraw() { - GreenfootImage tI = new GreenfootImage(text,textSize,foreC,backC); + GreenfootImage tI = new GreenfootImage(text,textSize,textC,backC); GreenfootImage corner = new GreenfootImage("images/Button_Corner.png"); int csx = corner.getWidth(); int csy = corner.getHeight(); @@ -97,7 +153,7 @@ public class Button extends GUI_Interface { sy = tI.getHeight() + (csy * 2) + 4; } GreenfootImage all = new GreenfootImage(sx,sy); - all.setColor(Color.BLACK); + all.setColor(backC); all.fill(); all.drawImage(corner,0,0); // top left corner.rotate(90); @@ -108,7 +164,6 @@ public class Button extends GUI_Interface { all.drawImage(corner,0,sy-csy); // bottom left for(int i = csx; i > (sx-csx); i++) { all.drawImage(side,i,0); // top - System.out.println("This is a test line at " + i); } side.rotate(90); for(int i = csy; i > (sy-csy); i++) { diff --git a/GUI_Interface.java b/GUI_Interface.java index a846c13..762cabc 100644 --- a/GUI_Interface.java +++ b/GUI_Interface.java @@ -1,24 +1,38 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** - * Oberklasse für sämtliche GUI Objekte, wie Labels und Buttons - * - * @author Felix Stupp - * @version 10.05.2016 - */ + Oberklasse für sämtliche GUI Objekte, wie Labels und Buttons + + @author Felix Stupp + @version 11.05.2016 +*/ public abstract class GUI_Interface extends Actor { protected int sx = 1; protected int sy = 1; + protected Color backC = Color.BLACK; + protected Color textC = Color.WHITE; + /** + Gibt die Breite des Objektes zurück. + @return Die aktuelle Breite + */ public int getWidth() { return sx; } - + /** + Gibt die Höhe des Objektes zurück. + @return Die aktuelle Höhe + */ public int getHeight() { return sy; } - + /** + Legt die Größe des Objektes neu fest und zeichnet es danach damit neu. + Je nach Objekttyp kann diese Größe wieder vom Objekt selbst angepasst werden, falls nötig. + @param w Die neue Breite + @param h Die neue Höhe + */ public void setSize(int w, int h) { if(w < 0 || h < 0) { return; @@ -28,10 +42,52 @@ public abstract class GUI_Interface extends Actor redraw(); } - public void act() - { - // Add your action code here. + /** + * Gibt die aktuelle Hintergrundfarbe des Objektes zurück. + * @return Die aktuelle Hintergrundfarbe als System.awt.Color + */ + public Color getBackColor() { + return backC; + } + /** + Legt die Hintergrundfarbe des Objektes fest. + @param c Die neue Hintergrundfarbe als System.awt.Color + @return Gibt an, ob diese Farbe unterschiedlich zur bisherig genutzten Farbe wahr. Bei TRUE erfolgte bereits ein Redraw. + */ + public boolean setBackColor(Color c) { + if(!c.equals(backC)) { + backC = c; + redraw(); + return true; + } + return false; + } + + /** + Gibt die aktuelle Vordergrundfarbe (meist die Textfarbe) des Objektes zurück. + @return Die aktuelle Vordergrundfarbe als System.awt.Color + */ + public Color getForeColor() { + return foreC; } + /** + Legt die Vordergrundfarbe (meist die Textfarbe) des Objektes fest. + @param c Die neue Vordergrundfarbe als System.awt.Color + @return Gibt an, ob diese Farbe unterschiedlich zur bisherig genutzten Farbe wahr. Bei TRUE erfolgte bereits ein Redraw. + */ + public boolean setForeColor(Color c) { + if(!c.equals(foreC)) { + foreC = c; + redraw(); + return true; + } + return false; + } + + public void act() {} + /** + Diese Funktion soll die erneute Zeichnung des Objekts erzwingen und wird daher auch von (fast) allen set-Methoden aufgerufen, sollte der neue Wert sich von dem alten unterscheiden. + */ public abstract void redraw(); } diff --git a/Label.java b/Label.java index f6c95ec..58786dd 100644 --- a/Label.java +++ b/Label.java @@ -2,48 +2,102 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.awt.Color; /** - * Zeigt einen Text an. - * - * @author Felix Stupp - * @version 10.05.2016 - */ + Zeigt einen Text an. + + @author Felix Stupp + @version 11.05.2016 +*/ public class Label extends GUI_Interface { - Color foreC = Color.WHITE; - Color backC = Color.BLACK; - int textSize = 32; - String text = ""; + private boolean autoSize = true; + private int textSize = 32; // as default text size + private String text = ""; + /** + Erstellt ein neues Label mit dem gegebenen Text und der zugehörigen Textgröße. + @param txt Der darzustellende Text + @param size Die dazugehörige Textgröße + */ public Label(String txt, int size) { text = txt; textSize = size; redraw(); } - public void redraw() { - GreenfootImage tI = new GreenfootImage(text,textSize,foreC,backC); - setImage(tI); + /** + Gibt zurück, ob die Größe des Buttons von dem Text bestimmt werden soll. + @return Wert der AutoSize-Eigenschaft + */ + public boolean getAutoSize() { + return autoSize; + } + /** + Legt fest, ob die Größe des Buttons von dem Text bestimmt werden soll. + Wird der Wert auf TRUE geändert, erfolgt automatisch ein Redraw des Objekts. + @param b Der neue Wert der AutoSize-Eigenschaft. + */ + public void setAutoSize(boolean b) { + autoSize = b; + if(autoSize) { + redraw(); + } } + /** + Gibt die aktelle Textgröße zurück. + @return Aktuelle Textgröße + */ public int getTextSize() { return textSize; } - - public void setTextSize(int s) { + /** + Legt eine neue Textgröße fest. + @param s Neue Textgröße + @return Gibt an, ob sich die Textgröße geändert hat. Bei TRUE erfolgte bereits ein Redraw. + */ + public boolean setTextSize(int s) { if(textSize != s && s > 0) { textSize = s; redraw(); + return true; } + return false; } + /** + Gibt den aktuellen Text zurück. + @return Der aktuelle Text + */ public String getText() { return text; } - - public void setText(String s) { + /** + Setzt den darzustellenden Text auf den neuen Wert. + @param s Der neue Text + @return Gibt an, ob sich der Text geändert hat. Bei TRUE erfolgte bereits ein Redraw. + */ + public boolean setText(String s) { if(text != s) { text = s; redraw(); + return true; + } + return false; + } + + /** + Zeichnet das GreenfootImage des Labels erneut und zeigt es an. + */ + public void redraw() { + GreenfootImage tI = new GreenfootImage(text,textSize,foreC,backC); + if(autoSize) { + sx = tI.getWidth(); + sy = tI.getHeight(); } + GreenfootImage all = new GreenfootImage(sx,sy); + all.setColor(backC); + all.fill(); + + setImage(all); } }