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

POO en paneles gui

Estas en el tema de POO en paneles gui en el foro de Java en Foros del Web. Hola, soy nuevo por aquí. Lo que quiero hacer es crear el tipico cambiar de panel al precionar un boton, para eso la clase que ...
  #1 (permalink)  
Antiguo 01/09/2012, 01:38
 
Fecha de Ingreso: agosto-2012
Mensajes: 18
Antigüedad: 7 años, 4 meses
Puntos: 1
POO en paneles gui

Hola, soy nuevo por aquí. Lo que quiero hacer es crear el tipico cambiar de panel al precionar un boton, para eso la clase que hereda JFrame(Principal) y agregar a este paneles, con un método habilitar y desabilitar hago que se visualizen(setVisible)

Código Java:
Ver original
  1. import java.awt.Container;
  2. import java.awt.EventQueue;
  3. import javax.swing.*;
  4.  
  5. public class Principal extends JFrame{
  6.    
  7.     private Login pnLogin=new Login(this);
  8.     private Menu pnMenu=new Menu(this);
  9.    
  10.     public Principal(){
  11.         setBounds(100, 100, 450, 350);
  12.        
  13.         Container contenedor=getContentPane();
  14.         contenedor.setLayout(null);
  15.        
  16.         contenedor.add(pnLogin);
  17.         contenedor.add(pnMenu);
  18.         habilitar(0);
  19.     }
  20.    
  21.     public void habilitar(int a){
  22.         desabilitar();
  23.         if(a==0)
  24.             pnLogin.setVisible(true);
  25.         else if(a==1)
  26.             pnMenu.setVisible(true);
  27.         else desabilitar();
  28.     }
  29.     public void desabilitar(){
  30.         pnLogin.setVisible(false);
  31.         pnMenu.setVisible(false);
  32.     }
  33.  
  34.     public static void main(String[] args) {
  35.         EventQueue.invokeLater(new Runnable() {
  36.             public void run() {
  37.                 try {
  38.                     Principal frame = new Principal();
  39.                     frame.setVisible(true);
  40.                 } catch (Exception e) {
  41.                     e.printStackTrace();
  42.                 }
  43.             }
  44.         });
  45.     }
  46. }

//Login

Código Java:
Ver original
  1. import javax.swing.JPanel;
  2. import javax.swing.JButton;
  3. import java.awt.event.ActionListener;
  4. import java.awt.event.ActionEvent;
  5.  
  6. public class Login extends JPanel {
  7.     private JButton btnBoton;
  8.     Principal princi;
  9.    
  10.     public Login(Principal princi) {
  11.             this.princi=princi;
  12.         setSize(400,300);
  13.         setLayout(null);
  14.        
  15.         btnBoton = new JButton("Boton");
  16.         btnBoton.addActionListener(new ActionListener() {
  17.             public void actionPerformed(ActionEvent e) {
  18.                 e.getSource();
  19.                 irMenu();
  20.             }
  21.         });
  22.         btnBoton.setBounds(139, 132, 91, 23);
  23.         add(btnBoton);
  24.  
  25.     }
  26.     public void irMenu(){
  27.         //princi=new Principal();
  28.         princi.habilitar(1);
  29.     }
  30. }

//Menu


Código Java:
Ver original
  1. import javax.swing.JPanel;
  2. import javax.swing.JButton;
  3. import java.awt.event.ActionListener;
  4. import java.awt.event.ActionEvent;
  5.  
  6.  
  7. public class Menu extends JPanel {
  8.     private JButton btnTres;
  9.     private JButton btnDos;
  10.     private JButton btnUno;
  11.     Principal princi;
  12.  
  13.     public Menu(Principal princi) {
  14.         princi=princi;
  15.         setSize(400,300);
  16.         setLayout(null);
  17.        
  18.         btnUno = new JButton("Uno");
  19.         btnUno.addActionListener(new ActionListener() {
  20.             public void actionPerformed(ActionEvent e) {
  21.                 e.getSource();
  22.                 irLogin();
  23.             }
  24.         });
  25.         btnUno.setBounds(104, 67, 91, 23);
  26.         add(btnUno);
  27.        
  28.         btnDos = new JButton("Dos");
  29.         btnDos.setBounds(104, 110, 91, 23);
  30.         add(btnDos);
  31.        
  32.         btnTres = new JButton("Tres");
  33.         btnTres.setBounds(104, 159, 91, 23);
  34.         add(btnTres);
  35.  
  36.     }
  37.     public void irLogin(){
  38.         //princi=new Principal();
  39.         princi.habilitar(0);
  40.     }
  41.  
  42. }

El cógigo que adjunto aquí funciona pero:

Mi duda nace cuando del panel JPanel Login quiero instanciar a Principal hago que su constructor de este reciba como parametro a la clase Principal que es el JFrame:

//Constructor:
Principal principal
public Login(Principal principal){
this principal=principal;
}

en el atributo de Principal tengo
Login pnLogin=new Login(this)

Esto me permite usar los métodos de la clase Principal, normalmente como habilitar y desabilitar

pero que pasa si instancio normalmente en el método irMenu() osea: Principal principal=new Principal(); aclarando que cada constructor dibuja su gui. Entonces, pensé sobrecargar el counstructor de la clase Principal para que cuando invoque Principal() en el metodo irMenu() esté disponible y así usar el método habilitar para cambiar de panel pero no, no me funciona, no logra cambiar de panel.

Eso es todo, sé que es un poco tedioso pero estoy dando vueltas aquí, ante todo muchas gracias por leer mi duda.

Última edición por mshelzr; 01/09/2012 a las 13:46
  #2 (permalink)  
Antiguo 02/09/2012, 04:43
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 10 años, 8 meses
Puntos: 306
Respuesta: POO en paneles gui

No entiendo lo que quieres hacer, prueba a explicar lo que intentas conseguir sin entrar en el cómo.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 02/09/2012, 18:01
 
Fecha de Ingreso: agosto-2012
Mensajes: 18
Antigüedad: 7 años, 4 meses
Puntos: 1
Respuesta: POO en paneles gui

Solucionado. Al ser nuevo en java tengo problemas con conceptos y para esto he tenido que reflexionar un poco.

Para poder usar el método habilitar y aún mantenerme en la clase Principal(organizador de los paneles: JFrame) he tenido que poner el modificador static al atributo pnLogin y pnMenu. Al hacer esto ya no dependo de tener parametro en cada clase de panel: por ejemplo Login(Principal princi).

Por cierto, Xerelo, tu firma me animó a pensarlo a fondo, gracias.

Etiquetas: clase, gui, paneles, poo, programa, string
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 18:49.