Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich hab ein Programm mit drei Klassen. Zwei Klassen (Steuerung, Oberflaeche) zu verlinken (um gegenseitigen zugriff zu haben) ist kein Problem. Nun möchte ich jedoch die 3te Klasse (Bewegung) auch noch ein Binden.
Wenn ich nun in der 3ten Klasse im Konstruktor den link initializieren möchte (mit "lnkOberflaeche = new Oberflaeche(this);") bekomme ich den Fehler: "The constructor Oberflaeche(Bewegung) is undefined". Was ja auch logisch ist da ich ja mit "this" eine Variable der Klasse "Bewegung" übergebe, der Konstruktor von der Klasse Oberflaeche aber eine Variable aus der Kl. Steuerung möchte.
Wie kann ich nun troztdem auf die Oberflaeche zugreifen??
nö, du kannst getter und setter für alles machen. meist gibt man damit private sachen aus einer klasse zurück, oder setzt diese. aber in deinem fall wäre ein konstruktor wohl auch ok. aber post doch mal den relevanten code?
public Bewegung() {
lnkDaten = new Daten(10,2,1,false);
lnkOberflaeche = new Oberflaeche(this);
}
Konstruktor
Code:
public void bewRechts() {
for(int i=0;i<9;i++){
int x=lnkDaten.getX(i);
int y=lnkDaten.getY(i);
lnkOberflaeche.zeichne(x, y); //<-- Methode die auf gerufen werden soll
}
lnkOberflaeche.loesche(lnkDaten.getX(0)-1, lnkDaten.getY(0)); //g.clearRect((lnkDaten.getX(0)-1), lnkDaten.getY(0), 1, 1);
for(int i=0;i<9;i++){
int x = lnkDaten.getX(i+1);
lnkDaten.setX(i,x);
int y = lnkDaten.getY(i+1);
lnkDaten.setY(i,y);
}
// neue Punkt
xNeu = lnkDaten.getX(8)+1;
lnkDaten.setX(9,xNeu);
zeit1 = System.currentTimeMillis();
while(System.currentTimeMillis() < zeit1+50){
}
}
Methode die von anderer Klasse aus aufgerufen wird
Code:
public Oberflaeche(Steuerung lnkSteuerung) {
super();
initialize();
this.lnkSteuerung = lnkSteuerung;
setVisible(true);
txaAusgabe.setText("");
}
public Oberflaeche(Bewegung lnkBewegung) {
this.lnkBewegung = lnkBewegung;
}
2. Klasse (Hab mal noch nen 2. Konstrucktor erstellt)
Code:
public void zeichne(int x, int y) {
g.drawLine(x, y, x, y);
}
die methode, die aufgerufen wird
aber ist es nicht irgendwie so dass wenn ich "lnkOberflaeche = new Oberflaeche(this);" mach, dass dann einen neue Oberflaeche erstellt wird ( die mit der alten aus der anderen Klasse erstellten nichts zu tun hat)!?
Aso, die getter und setter hab ich schon drin, nur was soll ich genau mit denen machen?
ja, es wird eine neue oberfläche erstellt, darum auch new. wenn du das nicht willst, musst du deine oberfläche immer mit durchreichen, oder irgendwo zwischenhalten --> ich nehm da immer nen singleton zu. schau mal in der wiki, wie das geht. ist recht einfach.
ich meinte auch eher dein klassendesign. eine klasse steuerung für die oberfläche finde ich nicht so gut...ich würd da nen keylistener machen, der dann entsprechend auch zeichnet. eine klasse bewegung, was soll die ausdrücken? ist es nicht eher so, dass die bewegung durch das neuzeichnen der koordinaten entsteht? genau kann ich dazu auch nix sagen, aber schau dir mal ein tutorial zu sowas im netz an oder so. es gibt da sicher auch vorgehensweisen, wie man da rangeht/rangehen sollte.