Domanda

Supponiamo che io sono questo:

class external {
    JFrame myFrame;
    ...

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

createContentPane restituisce un contenitore. Ora, se stavo facendo questo codice al di fuori della ActionListener che avrebbe funzionato, perché dovrei accesso a questo. Ma, al suo interno, non lo faccio. Ho accesso a myFrame, che è ciò che sta per essere aggiornata con il contenuto del metodo, ma che non è sufficiente per fare quello che voglio, a meno che non posso ottenere un questo fuori di esso.

Ho anche bisogno di informazioni provenienti da altre variabili di istanza da utilizzare createContentPane(), quindi non sono sicuro che posso farlo static.

È stato utile?

Soluzione

È possibile:

myFrame.setContentPane(createContentPane());

o

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

Tra l'altro, in Java classi prima lettera è di solito in maiuscolo. Il tuo codice sarà ancora compilare ed eseguire se non il nome del genere, ma seguendo Convenzioni di codifica sarete in grado di leggere il codice altrui, e molto più importante altro sarà in grado di leggere il codice.

Quindi questo sarebbe un migliore stile:

class External {
    JFrame myFrame;
    ...

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

convenzioni codice Java

Altri suggerimenti

external.this ti darà accesso all'istanza della classe contenitrice, se è questo che volete ...

Non so esattamente quello che stai ricevendo in, ma una classe interna ha accesso a tutti i membri della sua classe racchiude. Per accedere al puntatore "this" della classe contenitrice (ad esempio, per passare ad altri metodi) utilizzare:

someMethod(External.this);

Nel tuo esempio, si sta effettivamente complicando esso utilizzando "questo". Qui ci sono due opzioni che funzioneranno:

myFrame.setContentPane(createContentPane());

o

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

Si noti che si sta già accedendo MyFrame nello stesso modo.

Prima di tutto bisogna estendere la JFrame nella classe esterna come questo

class External extends JFrame {
.....
.....
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top