Pergunta

Suponha que eu tenho o seguinte:

class external {
    JFrame myFrame;
    ...

    class internal implements ActionListener {
        public void actionPerformed(ActionEvent e) {
             ...
             myFrame.setContentPane(this.createContentPane());
        }
    }
    ...
}

createContentPane retorna um Container. Agora, se eu estava fazendo isso fora do código do ActionListener ele iria trabalhar, porque eu teria acesso a isso. Mas, dentro dele, eu não sei. Eu tenho acesso a myFrame, que é o que vai ser atualizado com o conteúdo do método, mas isso não é o suficiente para fazer o que quiser, a menos que eu possa obter um presente fora dele.

Eu também preciso de informações de outras variáveis ??de instância para uso createContentPane(), então eu não tenho certeza se posso torná-lo static.

Foi útil?

Solução

Você pode:

myFrame.setContentPane(createContentPane());

ou

myFrame.setContentPane(external.this.createContentPane());

A propósito, em Java aulas primeira letra é geralmente maiúsculas. Seu código ainda irá compilar e executar, se você não nomeá-lo assim, mas, seguindo as convenções de codificação que você vai ser capaz de ler o código outros, e muito mais importante do outro será capaz de ler o seu código.

Portanto, este seria um melhor estilo:

class External {
    JFrame myFrame;
    ...

        class Internal implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                ...
                myFrame.setContentPane(createContentPane());
               //Or myFrame.setContentPane(External.this.createContentPane());
            }
        }
    ...
 }

Convenções de código Java

Outras dicas

external.this lhe dará acesso para a instância da classe juntando, se é isso que você quer ...

Não tenho certeza exatamente o que você está querendo chegar, mas uma classe interna tem acesso a todos os membros de sua classe delimitador. Para aceder ao "este" ponteiro da classe envolvente (por exemplo, para passar para outros métodos) a utilização:

someMethod(External.this);

No seu exemplo, você está, na verdade, complicando-lo usando "isto". Aqui estão duas opções que irá trabalhar:

myFrame.setContentPane(createContentPane());

ou

myFrame.setContentPane(External.this.createContentPane());

Note que você já está acessando MyFrame da mesma maneira.

Primeiro você tem que se estendem JFrame em sua classe externa como esta

class External extends JFrame {
.....
.....
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top