Chaos Variablensichtbarkeit ...

Status
Nicht offen für weitere Antworten.

Revenant

Aktives Mitglied
Hallo,

ich habe das Problem mal vereinfacht und Code weggelöscht. Beim Kompilieren bekomme ich den Fehler "Cannot find Symbol" innerhalb der Klasse des ActionListeners beim Aufruf von canvas.repaint(). Warum kennt der hier canvas nicht? Oben im Konstruktor habe ich doch diese Instanz angelegt?!

Code:
//die Klasse des Fensters
class CFenster extends JFrame {
   public int aktFunktion = 0;
    
    //der Konstruktor...
    CFenster (String titel) {
    	//...
	CCanvas canvas = new CCanvas();
	add(canvas);
    	//...
    }

    //die Ereignisbehandlung
    class CActionListener implements ActionListener {
	public void actionPerformed(ActionEvent e) {
	    //...
	    canvas.repaint();
	}
    }
}

//später kommt dann die Canvas Klasse, wo ich noch auf aktFunktion zugreifen will

Ausserdem habe ich das Problem, dass ich auf aktFunktion durch die Paint Methode der Canvas Klasse zugreifen will. Das das nicht geht (lokale Variable von CFenster) ist mir klar, wie kann ich aber trotzdem auf aktFunktion zugreifen?

Der Quellcode is generell schon ziemlich lang, von daher verlier ich als Anfänger auch langsam den Überblick. Hoffe es kann mir jemand helfen, sonst häng ich hier echt fest :/


Gruß
Revenant
 

SebiB90

Top Contributor
1.canvas auch als klassenvariable machen, wie aktFunktion
2.du übergibst der canvas klasse die CFenster instanz und greifst dann so zu:
Code:
cFensterVariable.aktFunktion
in cFensterVariable befindet sich die instanz von CFenster
 

Revenant

Aktives Mitglied
SebiB90 hat gesagt.:
1.canvas auch als klassenvariable machen, wie aktFunktion
gut hab ich gemacht, funktioniert auch prima!

SebiB90 hat gesagt.:
2.du übergibst der canvas klasse die CFenster instanz und greifst dann so zu:
Code:
cFensterVariable.aktFunktion
in cFensterVariable befindet sich die instanz von CFenster

Wie meinst du das mit dem übergeben? Einer Klasse kann man doch keine Instanz übergeben oder?
Schonmal danke für deine Hilfe.
 
S

SlaterB

Gast
Objekte kann man überall speichern,
wenn das CFenster ein CCanvas enthält, dann auch andersrum

Code:
class CCanvas {

  private CFenster fenster;

  public CCanvas(CFenster fensterParameter) {
    this.fenster = fensterParameter;
  }

  public void repaint {
    int i = fenster.aktFunktion;  // besser mit getAktFunktion() ansprechen
  }
}
 

SebiB90

Top Contributor
ich mein das so:
Code:
public class CCanvas {
  private CFenster fenster;
  
  public CCanvas(CFenster f) {
    fenster = f;
  }
  //restlicher code
}

public class CFenster {
  //variablen
  public CFenster() {
    canvas = new CCanvas(this); //momentane instanz übergeben
  }
  //restlicher code
}
 

Revenant

Aktives Mitglied
Klasse, es funktioniert!!!! ENDLICH :D :D :D

in anbetracht der Tatsache, dass dies meine erste Grafische Anwendung ist und ich ewig dran gehockt bin...

DANKE :applaus: für eure Hilfe, ich hätts sonst wohl nicht mehr gepackt, obwohl die Idee ja eigentlich so simpel ist!


Gruß
Revenant
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben