Auf get-Methode von ArrayList zugreifen von Methode einer Klasse

Rufus.Mueller

Bekanntes Mitglied
Moin,

ich habe eine Klasse Sequenz geschrieben die Sequenzen von farbigen Panels erzeugt. Die Panels werden in einer ArrayList abgelegt. Konstruktor siehe unten, die Farben so wie sie jetzt sind sind noch nicht endgültig.

In der gleichen Klasse will ich eine Methode praesentiere() implementieren. Diese Methode bekommt einen Frame übergeben und zeigt die Sequenz auf der die Methode aufgerufen wurde auf diesem Frame an indem der Reihe nach jeder Frame der ArrayList für eine Sekunde angezeigt wird. Das Problem ist, dass ich mit this.get() nicht die get-Methode von präsentiere aus aufrufen kann. Es kommt die Meldung "The method get(int) is undefined for the type Sequenz". Im Konstruktor funktioniert es aber und Sequenz ist vom Typ Array List. this. sollte die Sequenz referenzieren auf der die Methode praesentiere() aufgerufen wurde. Was mache ich falsch?

Java:
	//Konstruktor der Klasse Sequenz
	
	public Sequenz(int a) {
		int anzQuadrate=a;
		ArrayList<JPanel> sequenz = new ArrayList<JPanel>();
		
		if (anzQuadrate==4) {
			for (int i =1; i>=4; i++) {
			sequenz.add(new JPanel());
			}
			sequenz.get(0).setBackground(Color.GREEN);
			sequenz.get(1).setBackground(Color.RED);
			sequenz.get(2).setBackground(Color.BLUE);
			sequenz.get(3).setBackground(Color.YELLOW);
		}
		
		if (anzQuadrate==5) {
			for (int i =1; i>=5; i++) {
			sequenz.add(new JPanel());
			}
			sequenz.get(0).setBackground(Color.GREEN);
			sequenz.get(1).setBackground(Color.RED);
			sequenz.get(2).setBackground(Color.BLUE);
			sequenz.get(3).setBackground(Color.YELLOW);
			sequenz.get(4).setBackground(Color.GRAY);
		}
			
		
		if (anzQuadrate==6) {
			for (int i =1; i>=6; i++) {
			sequenz.add(new JPanel());
			}
			sequenz.get(0).setBackground(Color.GREEN);
			sequenz.get(1).setBackground(Color.RED);
			sequenz.get(2).setBackground(Color.BLUE);
			sequenz.get(3).setBackground(Color.YELLOW);
			sequenz.get(4).setBackground(Color.GRAY);
			sequenz.get(5).setBackground(Color.ORANGE);
		}
			
		
		if (anzQuadrate==7) {
			for (int i =1; i>=7; i++) {
			sequenz.add(new JPanel());
			}
			sequenz.get(0).setBackground(Color.WHITE);
			sequenz.get(1).setBackground(Color.RED);
			sequenz.get(2).setBackground(Color.BLUE);
			sequenz.get(3).setBackground(Color.YELLOW);
			sequenz.get(4).setBackground(Color.GRAY);
			sequenz.get(5).setBackground(Color.ORANGE);
			sequenz.get(6).setBackground(Color.WHITE);
		}
			
		
		if (anzQuadrate==8) {
			for (int i =1; i>=4; i++) {
			sequenz.add(new JPanel());
			}
			sequenz.get(0).setBackground(Color.RED);
			sequenz.get(1).setBackground(Color.GREEN);
			sequenz.get(2).setBackground(Color.GRAY);
			sequenz.get(3).setBackground(Color.YELLOW);
			sequenz.get(4).setBackground(Color.WHITE);
			sequenz.get(5).setBackground(Color.BLACK);
			sequenz.get(6).setBackground(Color.BLUE);
			sequenz.get(7).setBackground(Color.ORANGE);
		}		
	}


Java:
	public void praesentieren(JFrame window) throws InterruptedException {
		for (i=0; i>a; i++) {
			this.get(i).setVisible(false);
			window.add(window, this);
			this.get(i).setVisible(true);
			Thread.sleep(1000);
			this.get(i).setVisible(false);
		}
	}
 
Also
a) this zeigt auf das aktuelle Objekt der Klasse Sequenz und auf keine ArrayList, das ist schonmal dein erster Gedankenfehler!
b) die ArrayList existiert NUR lokal im Konstruktor momentan, weil du sie schließlich dort deklarierst!

--> Ziehe die ArrayList raus aus dem Konstruktor und deklariere sie als Instanzvariable der Klasse Sequenz, dann kannst du in deiner Methode auch mit
Code:
this.arraylistname.get(..)
darauf zugreifen. D.h. wenn der Name gleich bleiben würde
Code:
this.sequenz.get(...)
 
zu a) Stimmt, ich dachte fälschlicherweise, dass eine Instanz von Sequenz eine ArrayList IST!.
zu b) Habe es so gemacht wie Du sagst, es funktioniert! :toll:
 

Zurück
Oben