Raumplaner-Start/Stuhl.java

128 lines
3.4 KiB
Java

import java.awt.Shape;
import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;
import java.awt.geom.AffineTransform;
public class Stuhl
{
private int xPosition;
private int yPosition;
private int orientierung;
private String farbe;
private boolean istSichtbar;
private int breite;
private int tiefe;
public Stuhl() {
xPosition = 160;
yPosition = 80;
farbe = "blau";
orientierung = 0;
istSichtbar = false;
breite = 40;
tiefe = 40;
}
private Shape gibAktuelleFigur() {
// einen GeneralPath definieren
GeneralPath stuhl = new GeneralPath();
stuhl.moveTo(0 , 0);
stuhl.lineTo(breite, 0);
stuhl.lineTo(breite+(breite/20+1), tiefe);
stuhl.lineTo(-(breite/20+1), tiefe);
stuhl.lineTo(0 , 0);
// Das ist die Umrandung. Das Stuhl bekommt noch eine Lehne:
stuhl.moveTo(0 , (breite/10+1));
stuhl.lineTo(breite, (breite/10+1));
// transformieren:
AffineTransform t = new AffineTransform();
t.translate(xPosition, yPosition);
Rectangle2D umriss = stuhl.getBounds2D();
t.rotate(Math.toRadians(orientierung),umriss.getX()+umriss.getWidth()/2,umriss.getY()+umriss.getHeight()/2);
return t.createTransformedShape(stuhl);
}
/**
* Mache dieses Objekt sichtbar. Wenn es bereits sichtbar ist, tue nichts.
*/
public void zeige() {
if (!istSichtbar) {
istSichtbar = true;
zeichne();
}
}
/**
* Mache dieses Objekt unsichtbar. Wenn es bereits unsichtbar ist, tue nichts.
*/
public void verberge() {
loesche(); // "tue nichts" wird in loesche() abgefangen.
istSichtbar = false;
}
/**
* Drehe auf den angegebenen Winkel
*/
public void dreheAuf(int neuerWinkel) {
loesche();
orientierung = neuerWinkel;
zeichne();
}
/**
* Bewege dieses Objekt horizontal um 'entfernung' Bildschirmpunkte.
*/
public void bewegeHorizontal(int entfernung) {
loesche();
xPosition += entfernung;
zeichne();
}
/**
* Bewege dieses objekt vertikal um 'entfernung' Bildschirmpunkte.
*/
public void bewegeVertikal(int entfernung) {
loesche();
yPosition += entfernung;
zeichne();
}
/**
* Aendere die Farbe dieses Objektes in 'neueFarbe'.
* Gueltige Angaben sind "rot", "gelb", "blau", "gruen",
* "lila" und "schwarz".
*/
public void aendereFarbe(String neueFarbe) {
loesche();
farbe = neueFarbe;
zeichne();
}
/**
* Zeichne dieses Objekt mit seinen aktuellen Werten auf den Bildschirm.
*/
private void zeichne() {
if (istSichtbar) {
Shape figur = gibAktuelleFigur();
Leinwand leinwand = Leinwand.gibLeinwand();
leinwand.zeichne (
this, // leinwand kennt das Objekt
farbe, // definiert seine Zeichenfarbe
figur); // definiert seinen grafischen Aspekt
leinwand.warte(10);
}
}
/**
* Loesche dieses Objekt vom Bildschirm.
*/
private void loesche() {
if (istSichtbar){
Leinwand leinwand = Leinwand.gibLeinwand();
leinwand.entferne(this);
}
}
}