Frage

Angenommen, ich habe dies:

class external {
    JFrame myFrame;
    ...

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

createContentPane gibt einen Container. Nun, wenn ich außerhalb des ActionListener diesen Code tat es funktionieren würde, weil ich den Zugriff auf diese haben würde. Aber im Inneren, das tue ich nicht. Ich habe Zugang zu myFrame, das ist das, was mit dem Inhalt des Verfahrens aktualisiert werden wird, aber das ist nicht genug, um zu tun, was ich will, es sei denn, ich dies aus ihn heraus bekommen.

Ich brauche auch Informationen von anderen Instanzvariablen createContentPane() zu verwenden, so dass ich bin mir nicht sicher, ob ich es static machen.

War es hilfreich?

Lösung

Sie können entweder:

myFrame.setContentPane(createContentPane());

oder

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

Durch die Art und Weise, in Java Klassen erste Buchstaben sind in der Regel groß geschrieben. Ihr Code wird noch kompilieren und ausführen, wenn Sie es nicht so nennen, aber durch folgende Codierung Konventionen werden Sie in der Lage sein, anderen Code zu lesen, und viel wichtiger, andere in der Lage, den Code zu lesen.

So würde dies eine bessere Art sein:

class External {
    JFrame myFrame;
    ...

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

Java-Code Konventionen

Andere Tipps

external.this geben Sie die Instanz der umgebenden Klasse zuzugreifen, wenn das, was Sie wollen ...

nicht genau, was Sie bekommen an, aber eine innere Klasse hat Zugriff auf alle Mitglieder seiner umgebenden Klasse. Für den Zugriff auf den „diesen“ Zeiger der umgebenden Klasse (zum Beispiel passieren zu anderen Methoden) verwenden:

someMethod(External.this);

In Ihrem Beispiel Sie verkompliziert es tatsächlich von „this“ verwendet wird. Hier sind zwei Optionen, die funktioniert:

myFrame.setContentPane(createContentPane());

oder:

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

Beachten Sie, dass Sie bereits MyFrame auf die gleiche Weise zugreifen.

Als erstes müssen Sie JFrame in Ihrer äußeren Klasse wie folgt verlängern

class External extends JFrame {
.....
.....
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top