Foros del Web » Programación para mayores de 30 ;) » Java »

Clase "nieta" no modifica clase visual "abuela"

Estas en el tema de Clase "nieta" no modifica clase visual "abuela" en el foro de Java en Foros del Web. Hola a tod@s, gracias por leer mi pregunta. Resulta que tengo una jerarquía de clases mas o menos como esta: Pantalla (clase visual) | | ...
  #1 (permalink)  
Antiguo 01/01/2008, 17:13
Avatar de -=ArgoN=-  
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 18 años, 6 meses
Puntos: 1
Pregunta Clase "nieta" no modifica clase visual "abuela"

Hola a tod@s, gracias por leer mi pregunta.

Resulta que tengo una jerarquía de clases mas o menos como esta:

Pantalla (clase visual)
|
|
V
Controlador
|
|
V
Clients

Controlador extiende Pantalla y Clients a su vez extiende Controlador.
En la clase Clients estoy intentando modificar un elemento de su clase "abuela" Pantalla. Esta clase Pantalla es "visual" es decir que crea todos los componentes que se ven por pantalla.
Para iniciar la aplicación, utilizo la clase con un Main, llamada Iniciar.
Para interactuar con estos componentes hay un metodo publico para cada componente, el cual llamo desde Clients.

Un detalle es que cuando el código esta implementado en la clase hija todo funciona bien, pero cuando lo meto en la clase "nieta" ya deja de funcionar todo.

Por si quieren ver algo del código, les muestro algunos fragmentos, ya que es bastante largo:

Iniciar.java
Código PHP:
public class Iniciar {

    public static 
void main(String[] args) {

        new 
Controlador();
        
Clients c1 = new Clients();
        
c1.init();

    }


Pantalla.java
Código PHP:
public class Pantalla {

    private 
JFrame jFrame null;

    private 
JPanel jContentPane null;

    private 
JTabbedPane jTabbedPane null;

    private 
JPanel jPanelClients null;

    private 
JTextField jTextFieldNom null;

    
//[...]

    /**
     * This method initializes jFrame
     * 
     * @return javax.swing.JFrame
     */
    
public JFrame getJFrame() {
        if (
jFrame == null) {
            
jFrame = new JFrame();
            
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
jFrame.setSize(780580);
            
jFrame.setContentPane(getJContentPane());
        }
        return 
jFrame;
    }

    
/**
     * This method initializes jTextFieldNom    
     *     
     * @return javax.swing.JTextField    
     */
    
public JTextField getJTextFieldNom() {
        if (
jTextFieldNom == null) {
            
jTextFieldNom = new JTextField();
            
jTextFieldNom.setBounds(new Rectangle(1475131521));
        }
        return 
jTextFieldNom;
    }

    
//[...]



Controlador.java

Código PHP:
public class Controlador extends Pantalla {
    
    
//[...]

    
public Controlador(int i) {}
    
    public 
Controlador(){
        
super();
        
getJFrame().setVisible(true);
        
//[...]
    
}

    
//[...]


Clients.java
Código PHP:
public class Clients extends Controlador {

    
//[...]
    
    
public Clients(){
        
super(0);
        
//[...]
    
}

    public 
void init(){
        
//aquí hago todas las gestiones que no me funcionan, por ejemplo:
        
getJTextFieldNom().setText("prueba");
    }

    
//[...]



Espero que alguien sepa decirme que es lo que hago mal. Muchísimas gracias!

Feliz año 2008!

ArgoN

Última edición por -=ArgoN=-; 01/01/2008 a las 17:21
  #2 (permalink)  
Antiguo 01/01/2008, 17:42
Avatar de -=ArgoN=-  
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 18 años, 6 meses
Puntos: 1
Pregunta Re: Clase "nieta" no modifica clase visual "abuela"

Justamente despues de escribir este post me he dado cuenta del problema.
Una clase que quiera actuar sobre una clase visual tiene que haber llamado a su constructor (al de la clase visual), si esto no se hace asi, aunque haya herencia, los componentes visuales no pueden ser modificados.
Estoy en lo cierto?

Mi pregunta ahora es:

¿Cómo puedo implementar el control de la clase visual en varias clases separadas?

si yo tengo:

Pantalla
|
|
V
Controlador --------> Contratos
|
|
V
Clientes

Si hago super(); en la clase Clientes, llamo al constructor de la clase Controlador que a la vez llama al constructor de la clase visual Pantalla, que muestra por pantalla todos los elementos.
¿Si quiero administrar estos elementos visuales en clases distintas (Clientes y Contratos), para que funcione debo llamar al constructor de Pantalla desde cada una de las clases? esto me crea más de una pantalla... ¿qué puedo hacer?

Gracias de nuevo.

ArgoN
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:21.