Klasa anonimowa ActionListener - słowo "this"

1

witam
pisze sobie mały programik i chce w nim wywołać okienko wyboru koloru. Chcialem dodać actionlistenera jako klase anonimową do przycisku i jako pierwszy parametr (parent component) podac this (jako, że całą ramke JFrame w ktorej wlasnie tworze). Wyrzuciło błąd, a po zmianie na null wszystko było ok. To znaczy, ze klasa anonimowa tj. actionlistener nie moze sie odwołać do ramki w ktorej jest jakby.. używana?

Co mozecie wiecej powiedziec o klasach anonimowych? bo mnie ciekawi to;)

pozdrawiam i prosze o wyrozumiałosc :)

EDIT
No tak.. kod :D

		bWybKolor.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent arg0)
			{
				Color kolor = JColorChooser.showDialog(this, "tytul", Color.black);   << w tej linijce błąd
				notatnik.setForeground(kolor);
			}
		}); 

Błąd:

The method showDialog(Component, String, Color) in the type JColorChooser is not applicable for the arguments (new ActionListener(){}, String, Color)

0

W klasie anonimowej this oznacza tę właśnie klasę, a nie klasę w której anonimowa jest zawarta. Stwórz w głównej klasie pole, np. okno, przypisz okno = this;, w klasie anonimowej odwołuj się do pola okno.

1

Przed momentem na to wpadłem.. co zmęczenie robi z człowiekiem :D
dzieki wielkie
Zrobiłem cos takiego:

	private Ramka pole;
[...]kodkod[...]
		bWybKolor.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent arg0)
			{
				Color kolor = JColorChooser.showDialog(pole, "tytul", Color.black);
				notatnik.setForeground(kolor);
			}
		}); 

I teraz zmiennej pole nie musialem przypisywać "this", a działa. Lepiej przypisać dla swietego spokoju, czy moze zostac tak jak jest?;)

0

Raczej przypisz. obecny kod jest równoważny z

Color kolor = JColorChooser.showDialog(null, "tytul", Color.black);

Pole ramka jest zupełnie niepotrzebne.

0

Albo

Color kolor = JColorChooser.showDialog([nazwa klasy].this, "tytul", Color.black);

patrz:

public class Frejm extends JFrame{
	public Frejm() {
		this.setBounds(100, 100, 450, 300);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JButton btnNewButton = new JButton("New button");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				 Color kolor = JColorChooser.showDialog(Frejm.this, "tytul", Color.black);
				 System.out.println(kolor.getBlue());
			}

		});
		this.getContentPane().add(btnNewButton, BorderLayout.CENTER);
	}
}

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