diff --git a/Bildbutton.java b/Bildbutton.java new file mode 100644 index 0000000..024ccb5 --- /dev/null +++ b/Bildbutton.java @@ -0,0 +1,142 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import java.awt.Color; +import java.awt.Graphics2D; + +/** + Diese Klasse stellt einen Button dar. + Als funktionelles Vorbild dafür hält der Button aus dem .NET-Framework für UWP-Apps dar. + + @author Felix Stupp + @version 20.05.2016 +*/ +public class Bildbutton extends GUI_Interface { + + private boolean autoSize = false; + protected GreenfootImage picture = new GreenfootImage(1,1); + + 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 Bildbutton(GreenfootImage pict) { + picture = pict; + redrawInternal(); + } + /** + Erstellt einen Button mit dem gegebenen Objekt als Event-Handler. + @param h Der Handler mit dem Interface ButtonEvent implementiert. + */ + public Bildbutton(ButtonEvent h) { + handler = h; + redrawInternal(); + } + /** + 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 Bildbutton(GreenfootImage pict, ButtonEvent h) { + picture = pict; + handler = h; + redrawInternal(); + } + + /** + 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) { + redraw(); + } + } + + /** + Gibt den aktuellen Text zurück. + @return Der aktuelle Text + */ + public GreenfootImage getPicture() { + return picture; + } + /** + 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 setPicture(GreenfootImage s) { + if(picture != s) { + picture = 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; + } + + protected void redrawInternal() { + GreenfootImage tI = picture; + if(autoSize) { + sx = tI.getWidth() + (6 * 2) + 4; + sy = tI.getHeight() + (6 * 2) + 4; + } + GreenfootImage all = new GreenfootImage(sx,sy); + Color trans = new Color(0,0,0,0); + all.setColor(trans); + all.fill(); + Graphics2D g = all.getAwtImage().createGraphics(); + g.setColor(backC); + g.fillRoundRect(0,0,sx,sy,24,24); + all.drawImage(tI,(sx-tI.getWidth())/2,(sy-tI.getHeight())/2); + setImage(all); + } + + /** + Zeichnet das GreenfootImage des Buttons erneut und zeigt es an. + */ + public void redraw() { + redrawInternal(); + } +} diff --git a/Button.java b/Button.java index ac8a972..166b5b5 100644 --- a/Button.java +++ b/Button.java @@ -9,20 +9,18 @@ import java.awt.Graphics2D; @author Felix Stupp @version 20.05.2016 */ -public class Button extends GUI_Interface { +public class Button extends Bildbutton { - private boolean autoSize = false; private int textSize = 32; // as default text size private String text = ""; - 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) { + super(new GreenfootImage(txt,size,Color.WHITE,Color.BLACK)); text = txt; textSize = size; redraw(); @@ -32,7 +30,7 @@ public class Button extends GUI_Interface { @param h Der Handler mit dem Interface ButtonEvent implementiert. */ public Button(ButtonEvent h) { - handler = h; + super(h); redraw(); } /** @@ -42,41 +40,12 @@ public class Button extends GUI_Interface { @param h Der Handler mit dem Interface ButtonEvent implementiert. */ public Button(String txt, int size, ButtonEvent h) { + super(new GreenfootImage(txt,size,Color.WHITE,Color.BLACK),h); text = txt; textSize = size; - handler = h; redraw(); } - /** - 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) { - redraw(); - } - } - /** Gibt die aktelle Textgröße zurück. @return Aktuelle Textgröße @@ -119,44 +88,20 @@ public class Button extends GUI_Interface { 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; + public GreenfootImage getPicture() { + return null; } - /** - Entfernt den aktuellen EventHandler, um die Ausführung zukünftiger Events zu verhindern. - */ - public void removeHandler() { - handler = null; + + public boolean setPicture(GreenfootImage i) { + return false; } /** Zeichnet das GreenfootImage des Buttons erneut und zeigt es an. */ public void redraw() { - GreenfootImage tI = new GreenfootImage(text,textSize,foreC,backC); - if(autoSize) { - sx = tI.getWidth() + (6 * 2) + 4; - sy = tI.getHeight() + (6 * 2) + 4; - } - GreenfootImage all = new GreenfootImage(sx,sy); - Color trans = new Color(0,0,0,0); - all.setColor(trans); - all.fill(); - Graphics2D g = all.getAwtImage().createGraphics(); - g.setColor(backC); - g.fillRoundRect(0,0,sx,sy,24,24); - all.drawImage(tI,(sx-tI.getWidth())/2,(sy-tI.getHeight())/2); - setImage(all); + //picture = new GreenfootImage(text,textSize,Color.BLACK,Color.WHITE); + picture = new GreenfootImage(text,textSize,foreC,backC); + super.redraw(); } } diff --git a/ButtonEvent.java b/ButtonEvent.java index b3a914d..1eeac2b 100644 --- a/ButtonEvent.java +++ b/ButtonEvent.java @@ -9,6 +9,6 @@ import greenfoot.*; */ public interface ButtonEvent { - public void buttonClicked(Button obj); + public void buttonClicked(Bildbutton obj); } \ No newline at end of file diff --git a/Colours.java b/Colours.java index 71e997d..55a506b 100644 --- a/Colours.java +++ b/Colours.java @@ -10,7 +10,7 @@ import javax.swing.JOptionPane; */ public class Colours extends World implements ButtonEvent { - Button schwarz = new Button ("Schwarz", 16, this); + Bildbutton schwarz = new Bildbutton (new GreenfootImage("SchwarzeArmeeSkal.png"), this); Button blau = new Button ("Blau", 16, this); Button grün = new Button ("Grün", 16, this); Button rot = new Button ("Rot", 16, this); @@ -50,7 +50,7 @@ public class Colours extends World implements ButtonEvent super(x, y, z); setBackground(Start_Load.backgroundImage); - Button[] bList = new Button[] {schwarz,gelb,blau,grün,rot,lila,weiter,remove}; + Bildbutton[] bList = new Bildbutton[] {schwarz,gelb,blau,grün,rot,lila,weiter,remove}; Label[] lList = new Label[] {header,pl1,pl2,pl3,pl4,pl5}; addObject(header,200,15); @@ -78,7 +78,7 @@ public class Colours extends World implements ButtonEvent lila.setForeColor(new Color(161,70,255)); for(int i = 0; i < bList.length; i++) { - bList[i].setSize(100,50); + bList[i].setSize(164,100); } for(int i = 0; i < lList.length; i++) { lList[i].setBackColor(new Color(0,0,0,0)); @@ -94,7 +94,7 @@ public class Colours extends World implements ButtonEvent // verhindert durch falschsetzten einer Variable die Wiederauswahl einer Farbe // wenn Weiter geklickt wurde und x größer 1 ist wird eine neue Welt Map erzeugt, //der per Konstruktor die Daten der Colorklasse übertragen werden, dannach wird die Map die aktive Welt - public void buttonClicked (Button b) + public void buttonClicked (Bildbutton b) { if (x < 5) { if (b == schwarz && possw == true) { diff --git a/GeneralMap.java b/GeneralMap.java index 6edac2d..6d2d2b4 100644 --- a/GeneralMap.java +++ b/GeneralMap.java @@ -251,7 +251,7 @@ public abstract class GeneralMap extends World implements ButtonEvent } } - public void buttonClicked(Button b) { + public void buttonClicked(Bildbutton b) { if ( modus == b ) { if(status==GameStates.SETZEN && freeArmies == 0 ) { status=GameStates.KAMPF; diff --git a/InputDialogWorld.java b/InputDialogWorld.java index ff6ca06..712a14f 100644 --- a/InputDialogWorld.java +++ b/InputDialogWorld.java @@ -66,7 +66,7 @@ public class InputDialogWorld extends World implements ButtonEvent { } } - public void buttonClicked(Button b) { + public void buttonClicked(Bildbutton b) { if(b == abort) { inputS = null; } else if(b == okay) { diff --git a/Map.java b/Map.java index e36c0c9..daebc35 100644 --- a/Map.java +++ b/Map.java @@ -45,7 +45,7 @@ public class Map extends World implements ButtonEvent // } } // Die Map Buttons geben der Variable m einen Wert - public void buttonClicked(Button b) + public void buttonClicked(Bildbutton b) { if (b== map1) diff --git a/Start_Load.java b/Start_Load.java index 54ecf20..fcdd217 100644 --- a/Start_Load.java +++ b/Start_Load.java @@ -12,9 +12,9 @@ public class Start_Load extends World implements ButtonEvent // Light Theme: "backgroundLight.png" // Dark Theme: "backgroundDark.png" - Button chulien = new Button("Neues Spiel", 16 , this); - Button spielanleitung = new Button("Spielanleitung", 16, this); - Button zurück = new Button("zurück", 16, this); + Button chulien; + Button spielanleitung; + Button zurück; /** * Constructor for objects of class Start_Load. * @@ -23,6 +23,9 @@ public class Start_Load extends World implements ButtonEvent { // Create a new world with 600x400 cells with a cell size of 1x1 pixels. super(1600, 900, 1); + chulien = new Button("Neues Spiel", 16 , this); + spielanleitung = new Button("Spielanleitung", 16, this); + zurück = new Button("zurück", 16, this); setBackground(backgroundImage); chulien.setSize(100,50); spielanleitung.setSize(100,50); @@ -31,7 +34,7 @@ public class Start_Load extends World implements ButtonEvent addObject (spielanleitung, (1600-spielanleitung.getWidth())/2+100, (900-spielanleitung.getHeight())/2 + 80); } - public void buttonClicked ( Button b) + public void buttonClicked ( Bildbutton b) { if ( b == chulien) {