Pessoal quando estou dentro de uma classe anônima ou numa classe interna como faço para acessar os elementos da classe externa?
:?: ue cara nao entendi bem isso mas pelo que saquei vc quer pegar um classe ou pacote para poder usar seus metodos entaum vai…
:idea:
exemplo
8)
import javax.swing.JOptionPane;
(java x = pacote, swing = classe, JOptionPane = metodo (cria janelas de entrada de dados, janelas de impressao etc…)
import javax.swing.*;
(* importa todos os metodos da classe swing)
importa java.awt.*;
ufa i por ai vai … saum muitas hihihih :oops:
Não cara, assim…
Olha o fonte…
consultar = new JButton("Consultar");
consultar.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent evt) {
..............codigo...........
}
}
);
eu criei uma classe anônima para tratar eventos mas não sei como acessar métodos na classe externa…entendeu?
Bom, se eu não me engano, uma classe interna tem acesso total aos elementos da classe externa, desde que a classe interna não seja static.
[]'s
Pois é cara eu tb pensava mas assim…a classe externa se estende a JPanel portanto por herança tenho acesso aos métodos de JPanel…por´me quando quero acessar estes métodos dentro da classe anônima eu não consigo…nem por this.metodo, nem NomeDaClasse.metodo…
Tem alguma outra idéia?
Bom, por this.metodo() não funcionaria mesmo, já que this referencia o seu objeto da classe anônima…
E isso significa q estou lascado? :evil:
Não!!!
Posta seu código pra podermos analisar melhor o caso.
tente NomeDaClasse.this.metodo()
Não sei se tem a ver, mas, sem colocar o this - NomeDaClasse.this.metodo() - seria uma chamada a um método static, e por isso não funciona (se realmente o método static não existir)?
Funcionou!
Tipo pq NomeDaClasse.metodo não funcionou?
Vc pode explicar como que funciona NomeDaClasse.this.metodo?
A sua classe anônima não herda a classe em que ela está contida.
Fazer m this dentro dela, significa referencia a classe anônima em si.
Quando vc coloca NomeDaClasse.this.blablabla… vc diz que precisa referenciar a classe que contém a classe anônima…
Understand? (e se não for isso, por favor, me corrijam hehehe.)
:oops:
[]'s
Cara ainda não saquei…
pq NomeDaClasse.metodo não funciona? Pq tem q ter este this…tipo eu sei q this não vai funcionar na anônima até aí tranquilo só não entendo pq NomeDaClasse.metodo não funciona…
Só vai funcionar assim se o método for STATIC
lembra??? Não necessita de instância da classe para ser executado.
Agora, para vc usar um método não static, vc precisa dizer sobre qual instância o método vai agir.
por isso vc usa o this
sacou agora??
[]'s
Então a minha suspeita tava certa…
[]'s
Putz veio!! Agora acho q saquei…
Vc dizendo agora q me toquei NomeDaClasse.metodo é para a chamada de métodos estáticos da classe…
Na classe anônima eu não acesso só com THIS pq taria referênciando a própria classe anônima…
Agora NomeDaClasse.this(referência da instancia).metodo eu acesso todos os componentes da classe externa da instância atual…
Acho q entendi…
Vc assina embaixo disso q escrevi agora?
Eh isso ae!
[]'s
Certíssimo!
[]'s
Valeu Caio e Leandro pelos esclarecimentos!!!
acho que eu tenho o mesmo problema do cara de cima, mas com algumas variantes. no meu caso, eu quero mandar uma mensagem de um frame (frame1, por exemplo) para o frame que criou o frame1. só que quando eu especifico NomeDaClasse.this.método() ele dá essa mensagem:
not an enclosing class: package.NomeDaClasse
e colocar NomeDaClasse.método também não dá porque quero acessar métodos não-estáticos. alguém pode me dar uma idéia?
valeu