Problem z referencja przekazana do konstruktora

0

w funkcji main:

Tablecik tab = new Tablecik(demo);

w konstruktorze klasy Tablecik:

this.demo = demo;	
this.linie = new Lines(this.demo);

w konstruktorze klasy Lines

		
this.demo = demo;	
ActionListener bl2 = new ActionListener()  // rysoowanie linii z antialiasingiem
{

                public void actionPerformed(ActionEvent e)
	{
		try{
			int x0 = Integer.parseInt(xx0.getText());
			int x1 = Integer.parseInt(xx1.getText());
			int y0 = Integer.parseInt(yy0.getText());
			int y1 = Integer.parseInt(yy1.getText());
			this.demo.gp.drawAntialiasedLine(x0,y0,x1,y1,Color.BLACK);
			System.out.println("BBB");
	}
		catch(NumberFormatException ex){
			System.out.println("podany zly format liczby Linia antialiased");
		}
	}
};

o i blad przy kompilacji : cannot find symbol
symbol: variable demo
nie wiem o co kaman, bo przekazalem konstruktorowi referencje do dema tworzonego w mainie i przetrzymuje ta referencje jako pole klasy.
jedyne wytlumaczenie dla mnie to takie ze klasy wewnetrzne nie widza pol klas zewnetrznych ale to by bylo dziwne. czy ktos jest w stanie mi cos doradzic/pomoc.

0

Jeszcze pytanie w którym miejscu to wyrzuca? Bo zmienna demo jest tu dość często używana.

0

w actionlistenerze.
zrobilem to tak ze Lines to panel, Lines jest worzone w Tableciku ktory dziedziczy po JTabbedPane (czyli zakladki) demo to tez taki panel, po ktorym moge sobie rysowac i tam znajduje sie funkcja drawAntialiasedLine.

dokłądnie błąd jest w tej linijce:

  this.demo.gp.drawAntialiasedLine(x0,y0,x1,y1,Color.BLACK);
0

Problem jest tak na oko w tym wierszu:

this.demo.gp.drawAntialiasedLine(x0,y0,x1,y1,Color.BLACK);

Polega on na tym, że this odwołuje się do anonimowej klasy wewnętrznej implementującej ActionListener, a w niej nie ma przecież zmiennej demo.
Wystarczy usunąć this lub zmienić na Lines.this.demo..., a problem powinien zniknąć. Dostęp do this klasy zewnętrznej to zawsze nazwa tej klasy, kropka, this.

0
Olamagato napisał(a)

Problem jest tak na oko w tym wierszu:

this.demo.gp.drawAntialiasedLine(x0,y0,x1,y1,Color.BLACK);

Polega on na tym, że this odwołuje się do anonimowej klasy wewnętrznej implementującej ActionListener, a w niej nie ma przecież zmiennej demo.
Wystarczy usunąć this lub zmienić na Lines.this.demo..., a problem powinien zniknąć. Dostęp do this klasy zewnętrznej to zawsze nazwa tej klasy, kropka, this.

dzieki za pomoc :)
już ładnie śmiga.

1 użytkowników online, w tym zalogowanych: 0, gości: 1