Question

Supposons que j'ai ceci:

class external {
    JFrame myFrame;
    ...

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

createContentPane retourne un conteneur. Maintenant, si je faisais ce code en dehors du ActionListener cela fonctionnerait, parce que j'aurais accès à cela. Mais, à l'intérieur, je ne le fais pas. J'ai accès à myFrame, qui est ce qui va être mis à jour avec le contenu de la méthode, mais cela ne suffit pas à faire ce que je veux, à moins que je puisse obtenir ce sortir.

J'ai besoin aussi des informations provenant d'autres variables d'instance à utiliser createContentPane(), donc je ne suis pas sûr que je peux le faire static.

Était-ce utile?

La solution

Vous pouvez:

myFrame.setContentPane(createContentPane());

ou

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

Par ailleurs, dans les classes Java première lettre est généralement en majuscules. Votre code sera toujours compiler et exécuter si vous ne nommez pas comme ça, mais en suivant les conventions de codage, vous serez en mesure de lire le code des autres, et beaucoup plus important d'autres seront en mesure de lire votre code.

Ce serait donc un meilleur style:

class External {
    JFrame myFrame;
    ...

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

conventions de code Java

Autres conseils

external.this vous donnera accès à l'instance de la classe englobante, si c'est ce que vous voulez ...

Je ne sais pas exactement ce que vous obtenez à, mais une classe interne a accès à tous les membres de sa classe englobante. Pour accéder au pointeur « this » de la classe externe (par exemple, pour passer à d'autres méthodes) utiliser:

someMethod(External.this);

Dans votre exemple, vous compliquer réellement en utilisant « ce ». Voici les deux options qui fonctionnent:

myFrame.setContentPane(createContentPane());

ou

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

Notez que vous accédez déjà myFrame de la même manière.

Vous devez d'abord étendre JFrame dans votre classe externe comme celui-ci

class External extends JFrame {
.....
.....
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top