Ok ... ich fass es mal ganz kurz zusammen :
Du hast eine GUI und willst das sich auf Tastendruck etwas daran ändert.
Das ist doch ganz grob gesagt das was du willst , oder ?
Was du also brauchst sind folgende Dinge :
1) Die GUI selbst
2) Das , WAS sich nachher bewegen soll ...
3) Einen KeyListener der auf den Tastendruck reagiert
Ok ... geh ich das ganze mal Schritt für schritt durch.
Als GUI nehmen wir mal ein 10x10 Raster an *für Code sieh bitte in meinem Blog nach da ich nicht wirklich Lust habe bereits gepostetes noch mal zu posten obwohl ich dich bereits auf entsprechende Stelle verwiesen habe*. Das macht 100 Felder. Jedes dieser Felder müssen wir einzeln DIREKT ansprechen können. Das machen wir entweder mit einem 2D-Array oder einer 1D-Liste und geben jedem Feld bei erzeugung einen Identifier mit *ich persönlich würde hier das 2D-Array nehmen*.
Als nächstes erzeugen wir unsere Felder. Diese brauchen *im groben ohne zu sehr ins Detail zu gehen* nur ein Flag ob sich das zu bewegende Objekt gerade auf ihnen befindet oder nicht. Demzufolge ist die Klasse für die Felder sehr einfach aufgebaut.
Da man Variablen möglichst verborgen halten soll nennen wir dieses Flag also
Java:
private boolean flag=false;
Dann noch eine Setter- und eine Getter-Methode ... hierbei ist auf Grund des Datentyps boolean auf den Namen der Getter-Methode zu achten : laut Konventionen werden Getter welche bool-Flags returnen nicht "getXXX" genannt sondern "isXXX" :
Java:
public void setFlag(boolean flag) { this.flag=flag; }
public boolean isFlag() { return flag; }
Um jetzt HIER gleich das re-Rendern zu verlassen erweitern wir die Setter Methode noch wie folgt
Java:
public void setFlag()
{
this.flag=flag;
update(getGraphics());
}
Wobei darauf zu achten ist das die Feld-Klasse von z.B. JPanel oder vergleichbarem erbt.
Nun fügen wir dem Container *also in deinem Fall einem JFrame* noch einen KeyListener hinzu.
Auch ich würde hier das Design mit 2 Klassen bevorzugen. Es hält den ganzen Code deutlich übersichtlicher.
Im KeyListener implementieren wird jetzt die Tasten auf die wir reagieren wollen , also z.B. WASD und lassen dann über einen Thread die entsprechenden Methoden up() left() down() righ() aufrufen.
Jedoch verwende ich KEINEN Counter wie du ... sondern arbeite direkt mit dem Array.
Jeder dieser Methoden ruft eine Setter-Methode im JFrame *dort wo auch das Array liegt* auf dem wir einen Steuerparameter *bei 4 Möglichkeiten reicht Byte als Bit-Maske aus* mitgeben.
Diese Setter-Methode geht jetzt durch das Array und sucht erstmal mit Feld.isFlag() nach der aktuellen Position des zu bewegenden Objektes , wertet die Schleifen-Counter aus und entscheidet ob die gewünschte Bewegung gültig ist. Wenn FALSE , dann wird einfach returned und es passiert nichts. Wenn TRUE wird im alten Feld mit setFlag(false) die Auswahl aufgehoben und *in Abhängigkeit zur Steuer-Bit-Maske* X oder Y um eins erhöt oder verringert und schlussendlich im "neuen" Feld mit setFlag(true) das Flag gesetzt.
Das wäre eine halbwegs vernünftige OOP-Struktur nach der du dich versuchen kannst zu richten.
Auch hier poste ich dir wieder bewusst keinen Code da ich dich ja erstmal selbst denken lassen und auf KONKRETE FRAGEN warten will.
Wenn du z.B. bei den Referenzierungen der Felder Probleme hast ... dann kann man da speziell helfen ... aber deine Aufgabe wird dir hier so einfach keiner abnehmen.