Bom, tenho uma classe que extende a JFrame, e dentro desta classe tenho fazer referencia ao JFrame extendido(em um FileChooser), ate ai tudo bem, referencio com o “this”, mais eu tenho fazer essa referencia dentro de um listener, com o “this”, ele passa a referenciar o listener, e da erro.
Eu sei que dentro de classes anonimas você pode usar NomeDaClasse.this, assim:
public class MyFrame extends JFrame {
public int myVar;
...
aButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
MyFrame.this.myVar = 0;
}
});
}
Note que no código acima vc poderia referenciar diretamente myVar. 95% das vezes, vc var precisar de MyFrame.this quando this for parâmetro de algum método.
Mesmo nesses casos, recomendo fazer o contrário: crie um método no MyFrame que faz o que vc quer fazer e chame esse método no código anônimo, assim:
public class MyFrame extends JFrame {
xButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
doX((MyListener) evt.getSource());
}
});
...
public void doX(MyListener listener) {
listener.someMethod(this);
}
}
Uma grande vantagem é poder fazer subclasses de um (MyFrame) e de outro (MyLystener) e reaproveitar a maioria do código.