GUI Objekte Version 0.2

Funktionen teilweise durch Überführung in die GUI_Interface-Klasse verallgemeinert
InCode Dokumentation hinzugefügt/angepasst
Fehler verbessert
master
Zocker1999NET 10 years ago
parent d6a3ac0a4e
commit 4a460d84cd

@ -2,34 +2,44 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Color; import java.awt.Color;
/** /**
* Diese Klasse stellt einen Button dar. 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 26.04.2016 @author Felix Stupp
*/ @version 11.05.2016
*/
public class Button extends GUI_Interface { public class Button extends GUI_Interface {
boolean autoSize = true; private boolean autoSize = true;
Color foreC = Color.WHITE; private int textSize = 32; // as default text size
Color backC = Color.BLACK; private String text = "";
int textSize = 32; // as default text size
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) { public Button(String txt, int size) {
text = txt; text = txt;
textSize = size; textSize = size;
redraw(); redraw();
} }
/** /**
* Erstellt einen Button mit dem gegebenen Objekt als Event-Handler. Erstellt einen Button mit dem gegebenen Objekt als Event-Handler.
* @param h Der Handler mit dem Interface ButtonEvent implementiert. @param h Der Handler mit dem Interface ButtonEvent implementiert.
*/ */
public Button(ButtonEvent h) { public Button(ButtonEvent h) {
handler = h; handler = h;
redraw(); 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) { public Button(String txt, int size, ButtonEvent h) {
text = txt; text = txt;
textSize = size; 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() { public void act() {
if(Greenfoot.mouseClicked(this) && handler != this) { if(Greenfoot.mouseClicked(this) && handler != this) {
handler.buttonClicked(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() { public boolean getAutoSize() {
return autoSize; 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) { public void setAutoSize(boolean b) {
autoSize = b; autoSize = b;
if(autoSize) { 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() { public int getTextSize() {
return textSize; 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) { if(textSize != s && s > 0) {
textSize = s; textSize = s;
redraw(); redraw();
return true;
} }
return false;
} }
/**
Gibt den aktuellen Text zurück.
@return Der aktuelle Text
*/
public String getText() { public String getText() {
return text; 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) { if(text != s) {
text = s; text = s;
redraw(); redraw();
return true;
} }
return false;
} }
/**
Gibt den aktuellen EventHandler des Buttons zurück.
@return Der Handler als ButtonEvent
*/
public ButtonEvent getHandler() { public ButtonEvent getHandler() {
return handler; return handler;
} }
/**
Setzt den EventHandler auf ein neues Objekt.
@param h Der Handler mit implementiertem ButtonEvent-Interface
*/
public void setHandler(ButtonEvent h) { public void setHandler(ButtonEvent h) {
handler = h; handler = h;
} }
/**
Entfernt den aktuellen EventHandler, um die Ausführung zukünftiger Events zu verhindern.
*/
public void removeHandler() { public void removeHandler() {
handler = null; handler = null;
} }
/**
Zeichnet das GreenfootImage des Buttons erneut und zeigt es an.
*/
public void redraw() { 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"); GreenfootImage corner = new GreenfootImage("images/Button_Corner.png");
int csx = corner.getWidth(); int csx = corner.getWidth();
int csy = corner.getHeight(); int csy = corner.getHeight();
@ -97,7 +153,7 @@ public class Button extends GUI_Interface {
sy = tI.getHeight() + (csy * 2) + 4; sy = tI.getHeight() + (csy * 2) + 4;
} }
GreenfootImage all = new GreenfootImage(sx,sy); GreenfootImage all = new GreenfootImage(sx,sy);
all.setColor(Color.BLACK); all.setColor(backC);
all.fill(); all.fill();
all.drawImage(corner,0,0); // top left all.drawImage(corner,0,0); // top left
corner.rotate(90); corner.rotate(90);
@ -108,7 +164,6 @@ public class Button extends GUI_Interface {
all.drawImage(corner,0,sy-csy); // bottom left all.drawImage(corner,0,sy-csy); // bottom left
for(int i = csx; i > (sx-csx); i++) { for(int i = csx; i > (sx-csx); i++) {
all.drawImage(side,i,0); // top all.drawImage(side,i,0); // top
System.out.println("This is a test line at " + i);
} }
side.rotate(90); side.rotate(90);
for(int i = csy; i > (sy-csy); i++) { for(int i = csy; i > (sy-csy); i++) {

@ -1,24 +1,38 @@
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/** /**
* Oberklasse für sämtliche GUI Objekte, wie Labels und Buttons Oberklasse für sämtliche GUI Objekte, wie Labels und Buttons
*
* @author Felix Stupp @author Felix Stupp
* @version 10.05.2016 @version 11.05.2016
*/ */
public abstract class GUI_Interface extends Actor public abstract class GUI_Interface extends Actor
{ {
protected int sx = 1; protected int sx = 1;
protected int sy = 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() { public int getWidth() {
return sx; return sx;
} }
/**
Gibt die Höhe des Objektes zurück.
@return Die aktuelle Höhe
*/
public int getHeight() { public int getHeight() {
return sy; 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) { public void setSize(int w, int h) {
if(w < 0 || h < 0) { if(w < 0 || h < 0) {
return; return;
@ -28,10 +42,52 @@ public abstract class GUI_Interface extends Actor
redraw(); redraw();
} }
public void act() /**
{ * Gibt die aktuelle Hintergrundfarbe des Objektes zurück.
// Add your action code here. * @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(); public abstract void redraw();
} }

@ -2,48 +2,102 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Color; import java.awt.Color;
/** /**
* Zeigt einen Text an. Zeigt einen Text an.
*
* @author Felix Stupp @author Felix Stupp
* @version 10.05.2016 @version 11.05.2016
*/ */
public class Label extends GUI_Interface { public class Label extends GUI_Interface {
Color foreC = Color.WHITE; private boolean autoSize = true;
Color backC = Color.BLACK; private int textSize = 32; // as default text size
int textSize = 32; private String text = "";
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) { public Label(String txt, int size) {
text = txt; text = txt;
textSize = size; textSize = size;
redraw(); redraw();
} }
public void redraw() { /**
GreenfootImage tI = new GreenfootImage(text,textSize,foreC,backC); Gibt zurück, ob die Größe des Buttons von dem Text bestimmt werden soll.
setImage(tI); @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() { public int getTextSize() {
return textSize; 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) { if(textSize != s && s > 0) {
textSize = s; textSize = s;
redraw(); redraw();
return true;
} }
return false;
} }
/**
Gibt den aktuellen Text zurück.
@return Der aktuelle Text
*/
public String getText() { public String getText() {
return text; 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) { if(text != s) {
text = s; text = s;
redraw(); 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);
} }
} }

Loading…
Cancel
Save