Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/09/2012, 00:38
mshelzr
 
Fecha de Ingreso: agosto-2012
Mensajes: 18
Antigüedad: 11 años, 7 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 12:46