Pregunta

Supongamos que tengo esto:

class external {
    JFrame myFrame;
    ...

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

createContentPane devuelve un contenedor. Ahora, si yo estaba haciendo este código fuera del ActionListener que iba a funcionar, porque tendría acceso a este. Pero, dentro de él, no lo hago. Tengo acceso a myFrame, que es lo que va a ser actualizado con el contenido del método, pero eso no es suficiente para hacer lo que quiera, a menos que pueda conseguir un presente fuera de él.

También necesito información de otras variables de instancia de usar createContentPane(), así que no estoy seguro de que puedo hacerlo static.

¿Fue útil?

Solución

Puede:

myFrame.setContentPane(createContentPane());

o

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

Por cierto, en Java clases primera letra suele ser mayúsculas. Su código seguirá compilar y ejecutar si no lo nombra así, pero siguiendo las convenciones de codificación que va a ser capaz de leer el código de otros, y mucho más importante que otro será capaz de leer el código.

Así que esto sería un mejor estilo:

class External {
    JFrame myFrame;
    ...

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

convenciones código Java

Otros consejos

external.this le dará acceso a la instancia de la clase envolvente, si eso es lo que quiere ...

No estoy seguro exactamente lo que quieres decir, pero una clase interna tiene acceso a todos los miembros de su clase envolvente. Para acceder al puntero "this" de la clase envolvente (por ejemplo, para pasar a otros métodos) usar:

someMethod(External.this);

En su ejemplo, en realidad estás complicando mediante el uso de "este". Aquí hay dos opciones que funcionarán:

myFrame.setContentPane(createContentPane());

o

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

Tenga en cuenta que ya se está accediendo a MyFrame de la misma manera.

En primer lugar hay que extender JFrame en su clase externa como esto

class External extends JFrame {
.....
.....
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top