Information Technology Reference
In-Depth Information
aus den absoluten Koordinaten extrahiert, über der sich die Maus aktuell befindet. Dabei
müssen solche Fehler korrigiert werden, die immer dann entstehen können, wenn die Maus
über den Feldrand hinausbewegt wird. Mit anderen Worten, die folgende Programmse-
quenz gewährleistet, dass die Indizes immer im gültigen Bereich liegen. Um auch der Op-
tik zu entsprechen, werden die Startfelder mit einer blauen Grundierung neu gezeichnet.
public void mousePressed(java.awt.event.MouseEvent e) {
x = e.getX() / 40;
if (x < 0)
x = 0;
if (x > 7)
x = 7;
y = e.getY() / 40;
if (y < 0)
y = 0;
if (y > 7)
y = 7;
start = 21 + y * 10 + x;
alt = start;
end = start;
// mark start field
Graphics g = getGraphics();
g.setColor(blue);
g.fillRect(x * 40, y * 40, 40, 40);
try {
g.drawImage(figures[graphboard[start] % 100 - 10],
x * 40, y * 40, 40, 40, applet);
} catch (ArrayIndexOutOfBoundsException ex) {
}
}
Auch das Ziehen der Maus muss entsprechend überwacht werden. So muss beispielsweise
überprüft werden, ob die Maus auf ein neues Feld des Schachbrettes bewegt wurde. Sollte
dies nicht der Fall sein, werden die folgenden Operationen nicht ausgeführt. Wurde hin-
gegen die Maus auf ein neues Feld bewegt, wird das alte Feld wiederhergestellt. Dabei
bleibt das Startfeld bis zum Ende der Mausinteraktion markiert. Erst nach Abschluss der
Aktion wird das neue Feld markiert.
public void mouseDragged(java.awt.event.MouseEvent e) {
x = e.getX() / 40;
if (x < 0)
x = 0;
if (x > 7)
x = 7;
y = e.getY() / 40;
if (y < 0)
y = 0;
if (y > 7)
y = 7;
end = 21 + y * 10 + x;
if (end != alt) { if (alt != start)
paintBoardfield(alt);
if (end != start) { // mark new field
Graphics g = getGraphics();
if ((code != 1) && (isvalid(start * 100 + end)))
g.setColor(green);
else
g.setColor(red);
g.fillRect(x * 40, y * 40, 40, 40);
try {
g.drawImage(figures[graphboard[end] % 100 - 10],
x * 40, y * 40, 40, 40, applet);
} catch (ArrayIndexOutOfBoundsException ex) {
}
Search WWH ::




Custom Search