GUI Objekte Version 0.2

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

@ -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++) {

@ -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();
}

@ -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);
}
}

Loading…
Cancel
Save