Keylistener-Events hochreichen

Status
Nicht offen für weitere Antworten.

skelling

Mitglied
Hallo zusammen,

ich habe bereits fleißig gesucht, aber eine Antwort auf mein Problem konnte ich nicht finden.

Meine Anwendung folgt im Groben dem MVC-Pattern. Vereinfacht ausgedrückt: je eine View-, Model- und Controller-Klasse. Dazu noch eine Main-Klasse, die lediglich eine Instanz der Controller-Klasse erzeugt und das Programm startet.
Die Model-Klasse enthält eine größere Matrize, die vom View dargestellt wird. Weiterhin läuft im Controller ein Thread, der in regelmäßigen Abständen Änderungen an der Matrize durchführt. In der GUI kann der Benutzer durch Tastendrücke Änderungen vornehmen und da kommt meine Unsicherheit:

Ich würde gern die Verarbeitung der Tastendrücke im Controller vornehmen, bzw. vom View aus, wo der Keylistener registriert ist an den Controller weiterleiten. Im Moment mache ich das, indem ich den Controller dem View im Konstruktor übergebe, aber ich habe dabei kein gutes Bauchgefühl - lose Kopplung ist das nicht gerade.

Ich stehe gerade etwas auf dem Schlauch und brauche einen Schubs in die richtige Richtung.


Gruß,

skelling
 
Danke, das war hilfreich. Hab es jetzt (schematisch) wie unten -- So ok, oder gibt es noch Verbesserungsvorschläge?

-------------------
Model:
Code:
public class Model{
	...
	private Matrix matrix = new Matrix(...);	

	public Matrix getMatrix(){
		return this.matrix;
	}
}

-------------------
View:
Code:
public class View{
	Private JFrame frame = new JFrame();
	Private Matrix m;
	...

	public View(Matrix m){
		this.m = m;
		...
	}

	public void setKeyListener(KeyListener k) {
		this.frame.addKeyListener(k);
	}
	...
}
-------------------
Controller:

Code:
public class Controller implements KeyListener{
	...
	Model m = new Model();
	View v = new View(m.getMatrix());
	this.v.setKeyListener(this);
	...
}
 
Die Methode macht nicht das was man unter set... erwartet, daher solltest du den Namen in add... ändern.
Eine API sollte nach Möglichkeit keine Überraschungen bieten :wink:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben