gishur.gui
Class Painter

java.lang.Object
  |
  +--gishur.gui.Painter
Direct Known Subclasses:
DisplayObject, InputHandler

public abstract class Painter
extends java.lang.Object

Painter-Objekte beinhalten prinzipielle Methoden zur Darstellung. Sie sind die Basisklasse für DisplayObjects und InputHandler. Sie verwalten bereits Größeninformationen, Sichtbarkeitsdaten, Painter können sich beim Painterregister zum neuzeichnen registrieren, sie kennen ihren Layer und sie können miteinander verknüpft werden (in der Form: benötigt der eine Neuberechnung, so auch alle verknüpften).
Um ein Painter-Objekt zum Neuzeichnen zu veranlassen, sollte man einfach makeDirty() aufrufen. Das Painter-Objekt registriert sich dann beim zugehörigen Painterregister zum neuzeichnen. Das Neuzeichnen selbst erfolgt über paint, entsprechend wird an dieser Stelle die Registrierung gelöscht.
Vor dem Neuzeichnen wird calculateBounds aufgerufen. An dieser Stelle sollten rechenintensive Transformationen durchgeführt werden. Muß nähmlich der Painter neugezeichnet werden, ohne daß beim Painter makeDirty aufgerufen wurde (z.B. weil sich ein darunterliegendes Objekt geändert hat oder das Fenster aktualisiert werden muß), so wird calculateBounds nicht aufgerufen, sondern nur update; in dieser Methode sollten alle Malarbeiten geschehen.

Version:
1.0
Author:
Thomas Wolf

Field Summary
protected  Layer _layer
          Verknüpfter Layer.
protected  boolean _nofixedborder
          Falls diese Variable true ist, belegt das Objekt einen festen Bereich (ohne Beachtung der Bildschirmgröße o.ä.).
 
Constructor Summary
Painter()
          Leerer Konstruktor.
 
Method Summary
abstract  java.awt.Rectangle calculateBounds()
          Berechnet den neuen belegten Bereich.
 boolean dirty()
          Liefert true, falls das Objekt neu gezeichnet werden muß.
protected  java.awt.Rectangle enlargeRectangleByPainter(java.awt.Rectangle rect)
          Erweitert das Rechteck rect um das vom Painter belegt Gebiet, sofern dieser sichtbar ist und mindestens einmal gemalt wurde.
 boolean equals(java.lang.Object o)
          Überschreibt Object.equals.
 java.awt.Rectangle getBounds()
          Berechnet den belegten Bereich neu, falls notwendig.
 Layer getLayer()
          Liefert die verknüpfte Transformation.
 java.lang.String getPainterString()
          Hilfsmittel für toString.
 java.awt.Rectangle getPosition()
          Liefert die aktuelle Malposition des Painters.
 PainterRegister getRegister()
          Liefert den verknüpften PainterRegister.
 java.lang.Object getTarget()
          Liefert das verknüpfte Objekt.
 java.lang.Class getTargetClass()
          Liefert ein Klassenobjekt des verknüpften Objektes, auch wenn getTarget()==null liefert.
 ScreenTransformation getTransformation()
          Liefert die im verknüpften Layer gesetzte ScreenTransformation.
 VirtualScreen getVirtualScreen()
          Liefert das aktuelle VirtualScreen-Objekt.
 void hide()
          Macht das Objekt unsichtbar.
 void linkDirty(Painter painter)
          Verknüpft den Painter mit dem Painter painter derart, daß beim Aufruf von makeDirty auch makeDirty des verknüpften Painters aufgerufen wird.
 void makeDirty()
          Veranlaßt das DisplayObject sich bei der nächsten Gelegenheit neu zu zeichnen.
 void onHide()
          Wird aufgerufen, sobald hide() aufgerufen wurde.
 void onShow()
          Wird aufgerufen, sobald show() aufgerufen wurde.
 void paint(java.awt.Graphics g, java.awt.Rectangle paintbounds)
          Zeichnet das Objekt durch Aufruf von update neu.
 void recalcBounds()
          Berechnet den belegten Bereich neu.
 void removeLinkDirty(Painter painter)
          Entfernt einen verknüpften Painter.
protected  void setLayer(Layer layer)
          Setzt die zugehörige Transformation.
protected  void setRegister(PainterRegister register)
          Verknüpft das Objekt mit einem PainterRegister.
 boolean setTarget(java.lang.Object O)
          Setzt das verknüpfte Objekt neu.
 void show()
          Macht das Objekt wieder sichtbar.
 java.lang.String toString()
          Überschreibt Object.toString()
 void unRegister()
          Hebt eine Verknüpfung mit einem PainterRegister auf.
abstract  void update(java.awt.Graphics g)
          Zeichnet das Objekt auf das Graphics g neu.
 boolean visible()
          Liefert true, falls das Objekt sichtbar ist.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

_layer

protected Layer _layer
Verknüpfter Layer.

_nofixedborder

protected boolean _nofixedborder
Falls diese Variable true ist, belegt das Objekt einen festen Bereich (ohne Beachtung der Bildschirmgröße o.ä.). Dies ist z.B. bei Geraden nicht der Fall. Ist die Variable true, so wird das Objekt bei der Berechnung von Objektbereichen nicht mit berücksichtigt.
Constructor Detail

Painter

public Painter()
Leerer Konstruktor.
Method Detail

calculateBounds

public abstract java.awt.Rectangle calculateBounds()
Berechnet den neuen belegten Bereich.
Returns:
neuer Bereich

update

public abstract void update(java.awt.Graphics g)
Zeichnet das Objekt auf das Graphics g neu.
Parameters:
g - Graphics, auf dem gezeichnet werden soll

setRegister

protected final void setRegister(PainterRegister register)
Verknüpft das Objekt mit einem PainterRegister. Ist das Objekt sichtbar, so meldet es sich beim PainterRegister an, daß es neugemalt werden soll.
Parameters:
register - neuer PainterRegister

unRegister

public final void unRegister()
Hebt eine Verknüpfung mit einem PainterRegister auf. Dadurch kann es dem Painter-Objekt nicht mehr mitteilen, daß es ggf. neu gezeichnet werden muß.

getRegister

public final PainterRegister getRegister()
Liefert den verknüpften PainterRegister.
Returns:
PainterRegister

setLayer

protected final void setLayer(Layer layer)
Setzt die zugehörige Transformation.
Parameters:
neue - Transformation

getLayer

public final Layer getLayer()
Liefert die verknüpfte Transformation.
Returns:
verknüpfte Transformation

getTransformation

public final ScreenTransformation getTransformation()
Liefert die im verknüpften Layer gesetzte ScreenTransformation.

getVirtualScreen

public final VirtualScreen getVirtualScreen()
Liefert das aktuelle VirtualScreen-Objekt.
Returns:
aktueller VirtualScreen

getTarget

public java.lang.Object getTarget()
Liefert das verknüpfte Objekt. Wenn das Objekt nicht verknüpft ist, wird eine Referenz auf this zurückgegeben.
Returns:
verknüpftes Objekt

setTarget

public boolean setTarget(java.lang.Object O)
Setzt das verknüpfte Objekt neu.
Parameters:
O - neues Objekt
Returns:
true, falls Änderung erfolgreich, ansonsten null

getTargetClass

public java.lang.Class getTargetClass()
Liefert ein Klassenobjekt des verknüpften Objektes, auch wenn getTarget()==null liefert.
Returns:
Class-Objekt des verknüpfbaren Objekttypes.

toString

public java.lang.String toString()
Überschreibt Object.toString()
Overrides:
toString in class java.lang.Object

getPainterString

public final java.lang.String getPainterString()
Hilfsmittel für toString.

equals

public boolean equals(java.lang.Object o)
Überschreibt Object.equals. Sollte unbedingt benutzt werden, sobald die von DisplayObject abgeleitete Klasse andere Objekte darstellt. So wird dann Layer.find usw. nützlich.
Overrides:
equals in class java.lang.Object

visible

public boolean visible()
Liefert true, falls das Objekt sichtbar ist.
Returns:
true, falls sichtbar

hide

public final void hide()
Macht das Objekt unsichtbar. Das Objekt verschwindet beim nächsten Screen-Refresh.

show

public final void show()
Macht das Objekt wieder sichtbar. Das Objekt wird beim nächsten Screen-Refresh neu gezeichnet.

dirty

public final boolean dirty()
Liefert true, falls das Objekt neu gezeichnet werden muß.
Returns:
true, falls Objekt neu gezeichnet werden muß

makeDirty

public final void makeDirty()
Veranlaßt das DisplayObject sich bei der nächsten Gelegenheit neu zu zeichnen.

linkDirty

public final void linkDirty(Painter painter)
Verknüpft den Painter mit dem Painter painter derart, daß beim Aufruf von makeDirty auch makeDirty des verknüpften Painters aufgerufen wird. Wurde der Painter schon vorher mit einem anderen verbunden, so wird painter in der Kette der verknüpften Painter hinten eingefügt.
Parameters:
painter - Painter zu dem Verknüpfung erstellt werden soll

removeLinkDirty

public final void removeLinkDirty(Painter painter)
Entfernt einen verknüpften Painter.
Parameters:
painter - Painter zu dem Verknüpfung gelöscht werden soll

getBounds

public final java.awt.Rectangle getBounds()
Berechnet den belegten Bereich neu, falls notwendig. Diese Routine sollte vor einem update des Bildschirmes aufgerufen werden. Dabei wird dirty gelöscht.
Returns:
belegter Bereich

getPosition

public final java.awt.Rectangle getPosition()
Liefert die aktuelle Malposition des Painters.
Returns:
aktuelle Zeichenposition

recalcBounds

public final void recalcBounds()
Berechnet den belegten Bereich neu. Dabei wird die letzte gezeichnete Position vernachlässigt und dirty gelöscht. Sollte NUR beim kompletten Neuzeichnen aller Objekte aufgerufen werden.

paint

public final void paint(java.awt.Graphics g,
                        java.awt.Rectangle paintbounds)
Zeichnet das Objekt durch Aufruf von update neu.
Parameters:
g - Graphics, auf dem gezeichnet werden soll
paintbounds - Bereich, innerhalb dessen neugezeichnet werden soll.
See Also:
update(java.awt.Graphics)

enlargeRectangleByPainter

protected java.awt.Rectangle enlargeRectangleByPainter(java.awt.Rectangle rect)
Erweitert das Rechteck rect um das vom Painter belegt Gebiet, sofern dieser sichtbar ist und mindestens einmal gemalt wurde.
Parameters:
rect - zu erweiterndes Rechteck.
Returns:
falls rect==null die Position des Objektes, ansonsten das erweiterte rect

onShow

public void onShow()
Wird aufgerufen, sobald show() aufgerufen wurde.

onHide

public void onHide()
Wird aufgerufen, sobald hide() aufgerufen wurde.