Moin
Wenn die Graphic nicht ganz flüssig sein muss, sprich die
Figuren von einem Feld zum anderen springen, kann man mit
JButton und Gridbag arbeiten.
Das reicht wohl auf jeden Fall.
Man erzeugt ein Gridbag, füllt es mit JButtons und reg. die
entsprechenden ActionListener. Dadurch wird die klickdetection
SEHR einfach. Die JButton können Icons darstellen. Die Icons
kann man im Vorraus erzeugen (alle Figuren auf den 2 Feldern).
Man sieht dann nur die Icons und die Ränder um die Buttons.
ABER:
Bei resize müssen neue Icone her. Beliebige „Zoom-stufen“ sind
also schwierig.
Hmm. Ich denke, das GBL ist doch gerade für resize/zooming besonders geeignet. Und wenn die einzenen Felder=Buttons die Zelle ausfüllen, sollte das beim zoomen keine Probleme bereiten. Vielleicht ist der Begriff Zoom an dieser Stelle auch falsch, ich meinte eher skalieren.
Figuren können sich nicht in einer Animation von einem Feld zu
einem anderen bewegen, sie springen immer.
Animiert sollen sie auch nicht werden, also kein laufender Bauer oder so. Triviale Möglichkeit ist klar, das ist Anklicken des Startfeldes und dann Anklicken des Zielfeldes, woraufhin die beiden Felder mit den aktualisierten Grafiken neu angezeigt werden. Die elegantere Möglichkeit ist das „Schleppen“ der Figuren. Hierbei wird beim Klick auf das Ausgangsfeld die Figur angefasst, wandert mit der Maus mit - schwebt also förmlich über dem Brett - und wird dann auf dem Zielfeld wieder losgelassen. Hmm, kann man für sowas den Mauszeiger temporär ändern, so dass er für die Zeit während des Mausziehens aussieht wie die entsprechende Figur?
Animationen von Figuren (der King krazt sich am Ohr…) sind
auch tabu. Ist theo. möglich, aber dafür ist das
paint-swing-awt-…etc. System von java zu langsam.
S.o., für mich uninteressant. Sowas soll Eidos mit Battlechess XP oder so ähhnlich übernehmen. 
Die 2. Möglichkeit ist ein costum-System. Du schreibst dir
eine Klasse die von Canvas erbt und zeichnest alles selbst.
Dabei kann man Vector-graphiken einsetzen (Zoom frei
einstellbar !), das java pendant zum Framebuffer
(BufferedImage) einsetzen und Animationen basteln
(java.awt.Component.getGraphics()). Die Maus kann dabei
relativ einfach per MouseListener (Mousemotion- und
Mouse-Listener) kontrollieren. Der Motionlistener sollte
allerdings schnell und kurz sein, da er oft aufgerufen wird.
Dabei sollte man:
-
Auf den Typ der BufferedImage aufpassen. Lass die JVM
entscheiden was für sie am günstigen ist.
-
den Repaintmanager für das Canvas „ausschalten“.
Mal schauen, wie das überhaupt geht…
- Im vorraus BufferedImages in der aktuellen Zoom-stufe
erzeugen, falls Animationen/Bewegungen anstehen.
S.o., eher skalieren als zoomen. Ist deshalb vermutlich auch nicht nötig.
- Die Mehtode paint(Graphics g) der Canvas als letzten
Rettungsanker betrachten und nur benutzen (lassen) wenn’s
wirklich nicht anderes geht.
4.2. repaint() ist Tabu, weil sehr langsam.
Das verstehe ich nicht so ganz. AFAIK ist paint(Graphics g) doch DIE Methode, mit der man wirklich selbst zeichnen kann. Wenn sie nicht zu verwenden ist, wie soll es dann umgesetzt werden?
Die Buttons und Spielkontrollen würd ich aber in jedem Fall
mit normalen java-swing Elementen erzeugen. Die Funkionalität
der Buttons ist schon klasse.
Ja, das ist klar, da sehe ich auch weniger das Problem. Ich hadere immer noch mit dem Brett, tendiere aber zum GBL… 
ich hoffe ich konnte helfen.
Thx, auf jeden Fall!
BTW kennst Du (oder ein anderer Leser hier) ein deutschsprachiges Forum o.ä., wo sich Experten etwas intensiver (oder gar ausschliesslich) mit Java-Schachprogrammierung beschäftigen? Aufgrund der Geschwindigkeit, die ja das A und O für Schachprogramme sind, ist Java nicht gerade sonderlich geeignet für ein (starkes) Schachprogramm, aber zumindest ein bisschen Datenbank-ähnliche Anwendung mit Nachspielen und Abspeichern usw. solle ja wohl mit Java möglich sein. Lässt sich eigentlich auch ggf. eine C++ oder Assembler-dll in Java einbinden? Läuft dann wohl nur auf Window$-Rechnern, aber man hätte dafür wenigstens einen flottere Motor für das rechnende Schachprogramm („engine“).
Danke schon mal!
Harald