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

Duda con JPanels en JFrame

Estas en el tema de Duda con JPanels en JFrame en el foro de Java en Foros del Web. Hola, Tengo una asignación de recoger datos de n cantidad de estudiantes. Al iniciar el programa, debo pedir la cantidad de estudiantes a ingresar... Entonces ...
  #1 (permalink)  
Antiguo 28/10/2010, 12:19
Avatar de Physlet  
Fecha de Ingreso: octubre-2010
Ubicación: Panamá
Mensajes: 48
Antigüedad: 13 años, 6 meses
Puntos: 9
Duda con JPanels en JFrame

Hola,

Tengo una asignación de recoger datos de n cantidad de estudiantes. Al iniciar el programa, debo pedir la cantidad de estudiantes a ingresar... Entonces yo quisiera saber como podría hacer para que al colocar esa cantidad y al llenar por ejemplo el primer formulario del estudiante y presionar 'SIGUIENTE' aparezca nuevamente el mismo JPanel del formulario vacío hasta que llegue a la cantidad de estudiantes y procesar la información.

¿Cómo podría hacerlo? He probado de todo, pero bueno, son nuevo en modo gráfico jeje... Gracias de antemano!
  #2 (permalink)  
Antiguo 28/10/2010, 14:36
Avatar de juamd  
Fecha de Ingreso: marzo-2009
Ubicación: Bogotá
Mensajes: 285
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Duda con JPanels en JFrame

Que tal !!

Quieres tener un panel donde ingresas los datos del estudiante, pero en el mismo panel quieres ir mostrando los estudiantes que has ingresado ? asi fue como entendí tu pregunta. Si ese es el caso puedes :

1. Crear un jpanel dentro de un frame o un internal frame.
2. Crear una coleccion de tipo Estudiante para ir almacenando los que vas creando y siempre pasarsela al panel como parametro.
2. Dentro de ese panel creas el formulario y muestras el contenido de la coleccion
3. Cuando el usuario seleccione ingresar otro estudiante capturas los datos del form, creas el objeto estudiante y lo agregas a la coleccion.
4. Cargas nuevamente el panel con el form pero esta vez ya le pasas como parametro la coleccion con el nuevo estudiante

Espero sea de ayuda.

Saludos.
__________________
Dejenme saber cuando estoy equivocado y cuando estoy en lo cierto dejenme saber si existe una solución mejor.
  #3 (permalink)  
Antiguo 28/10/2010, 14:48
Avatar de Physlet  
Fecha de Ingreso: octubre-2010
Ubicación: Panamá
Mensajes: 48
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Duda con JPanels en JFrame

Hola, muchísimas gracias por contestar mi grito de ayuda! jaja..

Pues no, entendiste un poco mal, aunque es interesante tu comentario, lo tomaré en cuenta :D
Yo soy nuevo en esto del modo gráfico, sé solo cosas fundamentales, lo que quisiera saber es como puedo hacer que al entrar los datos de un estudiante y presionar 'siguiente' vuelva a aparecer el mismo formulario para agregar a otro.

Cuando termino de ingresar todos los datos de todos los estudiantes, procesar la información. Lo que más me interesa es la parte de que vuelva a aparecer el mismo formulario, lo de procesar la información ya lo tengo claro (asignar los datos a un array y demás).
  #4 (permalink)  
Antiguo 28/10/2010, 14:59
Avatar de juamd  
Fecha de Ingreso: marzo-2009
Ubicación: Bogotá
Mensajes: 285
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Duda con JPanels en JFrame

Despues de presionar siguiente procesas los datos y cargas de nuevo el formulario usando el mismo codigo que usaste para mostrarlo la primera vez.

Saludos.
__________________
Dejenme saber cuando estoy equivocado y cuando estoy en lo cierto dejenme saber si existe una solución mejor.
  #5 (permalink)  
Antiguo 28/10/2010, 15:05
Avatar de Physlet  
Fecha de Ingreso: octubre-2010
Ubicación: Panamá
Mensajes: 48
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Duda con JPanels en JFrame

Cita:
Iniciado por juamd Ver Mensaje
Despues de presionar siguiente procesas los datos y cargas de nuevo el formulario usando el mismo codigo que usaste para mostrarlo la primera vez.

Saludos.
Quizás sea porque yo lo cargo mal..
Yo solo aprendí a crear los componentes y me inventé una lógica para ello.

Lo que yo hago es crear una clase aparte llamada GUI y como constructor pongo el JFrame. Luego uso otro método llamado por ejemplo public JPanel panel1(); con el que creo el panel y así lo agrego al frame.. Es que no sé, no se me ocurre como hacer lo que dices usando un ciclo y todo lo demás..

¿Conocerás un buen ejemplo para trabajar modo gráfico? Para poder guiarme de ahí..

Muchas gracias :D
  #6 (permalink)  
Antiguo 28/10/2010, 15:25
Avatar de juamd  
Fecha de Ingreso: marzo-2009
Ubicación: Bogotá
Mensajes: 285
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Duda con JPanels en JFrame

Creas un frame, dentro agregas un panel y dentro de ese panel un scrollpane, el scrollpane es para usar las barras de desplazamiento y los datos no se pierdan.

Al scrollpane le puedes agregar un panel con el formulario donde pides los datos, eso se hace asi:

Código:
this.PanelPpal.setViewportView(panel);
El codigo anterior va en el frame o sea que el this hace referencia al frame mismo y el PanelPpal es un objeto de tipo ScrollPane que se puede agregar con el asistente del netbeans para evitar la creación por codigo. panel es el panel que quieres que sea mostrado en el frame, en otras palabras panel es el que tiene el formulario.


Ya sabes como mostrar un panel dentro del Frame, ahora como retornar el panel a mostrar ? se puede hacer asi:

Código:
public JPanel getPanel(){
        return this;
}
Este pequeño metodo va dentro del codigo de tu panel asi cuando el retorne this se retornará el mismo con todo su contenido.


Como se unen las dos cosas ?


En java todo es un objeto por lo tanto sus formularios y elementos tambien lo son, deberias crear una forma de llamar el objeto frame sin problemas, pero la cuestion es que no puedes declarar mas de un objeto de tipo frame porque cuando cierres uno se cierra toda la aplicacion, esto se resuelve usando algo que es sencillo conceptualmente, se llama el patron de diseño singleton que lo unico que hace es evitar que exista mas de un objeto de un determinado tipo en la aplicacion. Codigo:

Código:
    /** Constructor privado*/
    private FormPrincipal() {
        initComponents();
    }

    /**
     * Este metodo obtiene la instancia del objeto FormPrincipal
     * @return
     */
    public static FormPrincipal obtenerInstancia(){
        if(miInstancia == null)
            miInstancia = new FormPrincipal();
        return miInstancia;
    }
Los dos metodos anteriores estan dentro del frame y garantizan que solo se pueda crear un objeto de ese tipo en la ejecucion.


Ya tienes el panel y tienes el frame pero necesitas que al dar click en agregar otro se cargue el mismo formulario, para eso supongamos que tienes un boton "agregar otro" en el evento actionperformed de ese boton llamas al metodo que cargue el panel y lo que hace es :

Código:
FormPrincipal formPrincipal = FormPrincipal.obtenerInstancia();
formPrincipal.setPanel(this.getPanel());
Primero llamas la instancia del form principal y luego le asignas un panel para ser mostrado y no es nada mas y nada menos que el panel que tenemos en el momento.

Saludos.
__________________
Dejenme saber cuando estoy equivocado y cuando estoy en lo cierto dejenme saber si existe una solución mejor.
  #7 (permalink)  
Antiguo 28/10/2010, 15:45
Avatar de Physlet  
Fecha de Ingreso: octubre-2010
Ubicación: Panamá
Mensajes: 48
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Duda con JPanels en JFrame

Pregunto, ¿la forma en la que yo aplico esto del modo gráfico será la correcta?
Mira te pondré un ejemplo que acabo de inventar, no lo he compilado para probar si funciona porque apenas estoy instalando el compilador de linux y en serio necesito ayuda con esto jeje... Así que si tengo un error, perdón.

Código:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class GUI implements ActionListener{
   private JFrame frame;
   private JPanel panel1;
   private JLabel label1;
   private JButton button1;

   public GUI(){
      frame = new JFrame("ventana de prueba");
      Container c = frame.getContentPane();
      c.add(panel1());
      frame.setVisible(true);
      frame.pack();
   }

   public JPanel panel1(){
      panel1 = new JPanel(new GridLayout(1, 2));
      label1 = new JLabel("Texto prueba");
      button1 = new JButton("Click me");
      button1.addActionListener(this);
      
      panel1.add(label1);
      panel1.add(button1);

      return panel1;
    }

    public void actionPerformed(ActionEvent e){
       System.out.println("Has presionado el botón");
    }
}

public class Test{
   public static void main(String[] args){
      new GUI();
   }
}
¿Esto está bien? Es la lógica que "inventé", en sentido de que no consulté otros sitios y lo traté de hacer como pueda...

Muchas gracias por tu atención, me estás ayudando mucho :D
  #8 (permalink)  
Antiguo 28/10/2010, 16:04
Avatar de juamd  
Fecha de Ingreso: marzo-2009
Ubicación: Bogotá
Mensajes: 285
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Duda con JPanels en JFrame

Copié tu codigo y lo corri a ver que problemas tenia, todo funciona bien debes quitar la clase Test de ahi ya que es publica y al serlo debe ir en un archivo Test.java. El ejemplo corre y bien pero te vas a enfrentar a un problema grande despues y son el layout de los componentes, esto quiere decir la distribucion del componente en la pantalla. Te recomiendo usar el netbeans para generar los componentes con el asistente. Si lo quieres hacer "a pedal" de la manera como lo hiciste funciona bien.

Saludos!!!
__________________
Dejenme saber cuando estoy equivocado y cuando estoy en lo cierto dejenme saber si existe una solución mejor.
  #9 (permalink)  
Antiguo 28/10/2010, 16:10
Avatar de Physlet  
Fecha de Ingreso: octubre-2010
Ubicación: Panamá
Mensajes: 48
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Duda con JPanels en JFrame

Cita:
Iniciado por juamd Ver Mensaje
Copié tu codigo y lo corri a ver que problemas tenia, todo funciona bien debes quitar la clase Test de ahi ya que es publica y al serlo debe ir en un archivo Test.java. El ejemplo corre y bien pero te vas a enfrentar a un problema grande despues y son el layout de los componentes, esto quiere decir la distribucion del componente en la pantalla. Te recomiendo usar el netbeans para generar los componentes con el asistente. Si lo quieres hacer "a pedal" de la manera como lo hiciste funciona bien.

Saludos!!!
¿Cómo puedo hacer para generar los componentes en NetBeans sin tener que crear una aplicación de escritorio? Es que he visto que los códigos de NetBeans son muy enredados y hay muchos códigos innecesarios..

Y disculpa que te moleste mucho, pero como manejaría con el programa principal o con los eventos esa parte de volver a crear el panel? En este caso el método void panel1();
  #10 (permalink)  
Antiguo 29/10/2010, 00:35
 
Fecha de Ingreso: diciembre-2005
Mensajes: 97
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Duda con JPanels en JFrame

[QUOTE=Physlet;3615295]Pregunto, ¿la forma en la que yo aplico esto del modo gráfico será la correcta?
Mira te pondré un ejemplo que acabo de inventar, no lo he compilado para probar si funciona porque apenas estoy instalando el compilador de linux y en serio necesito ayuda con esto jeje... Así que si tengo un error, perdón.

Código:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class GUI implements ActionListener{
   private JFrame frame;
   private JPanel panel1;
   private JLabel label1;
   private JButton button1;

   public GUI(){
      frame = new JFrame("ventana de prueba");
      Container c = frame.getContentPane();
      c.add(panel1());
      frame.setVisible(true);
      frame.pack();
   }

   public JPanel panel1(){
      panel1 = new JPanel(new GridLayout(1, 2));
      label1 = new JLabel("Texto prueba");
      button1 = new JButton("Click me");
      button1.addActionListener(this);
      
      panel1.add(label1);
      panel1.add(button1);

      return panel1;
    }

    public void actionPerformed(ActionEvent e){
       System.out.println("Has presionado el botón");
    }
}

public class Test{
   public static void main(String[] args){
      new GUI();
   }
}
Hice unas modificaciones a tu código:
Código:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Ejemplo implements ActionListener{



   private JFrame frame;
   private JPanel panel1;
   private JLabel label1;
   private JTextField texto;
   private JButton button1;

   public Ejemplo(){
      frame = new JFrame("ventana de prueba");
      Container c = frame.getContentPane();
      c.add(panel1());
      frame.setVisible(true);
      frame.pack();
   }

   public JPanel panel1(){
      panel1 = new JPanel(new GridLayout(2, 2));
      label1 = new JLabel("Texto prueba");
      texto=new JTextField("");
      button1 = new JButton("Click me");

      button1.addActionListener(this);

      panel1.add(label1);
      panel1.add(texto);
      panel1.add(button1);

      return panel1;
    }
  public void resetearCampos(){
       texto.setText("");
   }

    public void actionPerformed(ActionEvent e){
       if(e.getSource().equals(button1))
           //En esta linea pones el método que tienes para ingresar los alumnos a tu colección
           resetearCampos();
    }

   public static void main(String[] args){
      new Ejemplo();
   }

}
__________________
_Derek_
  #11 (permalink)  
Antiguo 29/10/2010, 07:21
Avatar de juamd  
Fecha de Ingreso: marzo-2009
Ubicación: Bogotá
Mensajes: 285
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Duda con JPanels en JFrame

No entiendo la pregunta sobre el netbeans, acaso no estas creando una aplicación de escritorio ?
__________________
Dejenme saber cuando estoy equivocado y cuando estoy en lo cierto dejenme saber si existe una solución mejor.
  #12 (permalink)  
Antiguo 29/10/2010, 09:12
Avatar de Physlet  
Fecha de Ingreso: octubre-2010
Ubicación: Panamá
Mensajes: 48
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Duda con JPanels en JFrame

Cita:
Iniciado por juamd Ver Mensaje
No entiendo la pregunta sobre el netbeans, acaso no estas creando una aplicación de escritorio ?
Locuras mías, no me hagas caso jajaja... Mil disculpas.
Bueno, he logrado lo de resetear lso campos ayer, se me olvidó mencionarlo.

Lo que hice fue algo como lo siguiente:

Código:
				frame.setVisible(false);
				frame.getContentPane().removeAll();
					frame.getContentPane().add(panel = panelA());
				frame.setVisible(true);
Donde panelA() es el método que generaba el panel del formulario y panel el atributo de la clase.
Oculto y vuelvo a mostrar el frame porque cuando hago esos cambios, en la pantalla no se ven hasta que no mueva la ventana o algo por el estilo, debe ser un error del compilador que tengo acá, pero bueno.

Ahora me surgió un problemade FLOJERA a la hora de administrar como será la ventana final... Todo por culpa de los layouts y demás que no se me ocurre nada jaja.. Pues sí,t endré que pasar esto a netbeans :P!

Muchas gracias chicos por su ayuda!

Etiquetas: jframe
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 17:59.