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

[SOLUCIONADO] Reconstruir JPanel con Swing

Estas en el tema de Reconstruir JPanel con Swing en el foro de Java en Foros del Web. Buenas he hecho un formulario en Java y me gustaría, que al pulsar un botón se borrase el formulario y en la ventana apareciese algo ...
  #1 (permalink)  
Antiguo 19/04/2014, 14:37
 
Fecha de Ingreso: noviembre-2012
Mensajes: 53
Antigüedad: 12 años
Puntos: 1
Reconstruir JPanel con Swing

Buenas he hecho un formulario en Java y me gustaría,
que al pulsar un botón se borrase el formulario y en la
ventana apareciese algo asi ("tu nombre es: "+campoNombre.getText() ) etc...

De momento he conseguido que al pulsar el botón se borre un JPanel el cual tiene todos los elementos del formulario. de este modo:

Código:
public void actionPerformed(ActionEvent evento)
{
            panelGlobal.removeAll();
            panelGlobal.repaint();
}
al pulsar el botón se inicia ese código.
Ahora una vez la ventana está limpia lo que pense era añadirle ahora el texto con los datos del formulário algo como esto:
Código:
public void actionPerformed(ActionEvent evento)
{
            panelGlobal.removeAll();
            panelGlobal.repaint();
            panelGlobal.add(new JLabel("tu nombre es: "+nombre.getText()))
            [....] etccc
}
pero a la ventana sigue en blanco aunque le añada JLabels etc...

Me harías un favor si me ayudaseis con ello un saludo

Para los que tengan paciencia y, o ganas de aprender os dejo el código del proyecto entero:
Código:
public class FormularioConScrollCheckBottonsETC implements ActionListener
{
    //limpiar JFrame removeAll()//or remove(JComponent) revalidate(); repaint();
    JFrame frame;
    static JButton enviar,cancelar;
    static JTextField nombre;
    static JPasswordField password;
    static JTextArea descripcion;
    static JScrollPane scrollDescripcion;
    static ButtonGroup radioBotones;
    static JRadioButton opcion1,opcion2;
    static Checkbox hobby1,hobby2,hobby3;
    static JList lista;
    JPanel panelGlobal;
    
    
    FormularioConScrollCheckBottonsETC()
    {
        //creacion de frame y paneles
        frame=new JFrame("Formulario");
        //frame.setLayout(new GridLayout(8,2));
        
        //inicializamos las variables globales
        panelGlobal=new JPanel();
        panelGlobal.setLayout(new GridLayout(8,2));
        enviar=new JButton("Enviar");
        enviar.addActionListener(this);
        cancelar=new JButton("Cancelar");
        cancelar.addActionListener(this);
        nombre=new JTextField(10);
        password=new JPasswordField(10);
        descripcion=new JTextArea();
        scrollDescripcion=new JScrollPane(descripcion);
        radioBotones=new ButtonGroup();
        opcion1=new JRadioButton("Si",true);
        opcion2=new JRadioButton("no");
        radioBotones.add(opcion1);
        radioBotones.add(opcion2);
        hobby1=new Checkbox("ordenadores",false);
        hobby2=new Checkbox("deportes",false);
        hobby3=new Checkbox("darse palillo",false);
        String cosasLista[]={"Soltero","Casado"};
        lista=new JList(cosasLista);
        
        
        //añadimos cosas
        //nombre
        panelGlobal.add(new JLabel("Nombre: ",JLabel.RIGHT));
        panelGlobal.add(nombre);
        //contraseña
        panelGlobal.add(new JLabel("contraseña: ",JLabel.RIGHT));
        panelGlobal.add(password);
        //descripcion con Scroll
        panelGlobal.add(new JLabel("Descripción: ",JLabel.RIGHT));
        panelGlobal.add(scrollDescripcion);
        //RadioButtons
        JPanel panelRadioBotones=new JPanel();
        panelRadioBotones.add(opcion1);
        panelRadioBotones.add(opcion2);
        panelGlobal.add(new JLabel("¿Es vegetariano?",JLabel.RIGHT));
        panelGlobal.add(panelRadioBotones);
        //checkButtons
        JPanel panelCheckBotones=new JPanel();
        panelCheckBotones.add(hobby1);
        panelCheckBotones.add(hobby2);
        panelCheckBotones.add(hobby3);
        panelGlobal.add(new JLabel("Hobbies: ",JLabel.RIGHT));
        panelGlobal.add(panelCheckBotones);
        //lista de opciones
        panelGlobal.add(new JLabel("Estado civil: ",JLabel.RIGHT));
        panelGlobal.add(lista);
        //Boton enviar
        panelGlobal.add(enviar);
        panelGlobal.add(cancelar);
        frame.add(panelGlobal);
        
        //empaquetamos
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    @Override
    public void actionPerformed(ActionEvent evento)
    {
        //Container f=frame.getContentPane();
        if (evento.getSource()==cancelar)
        {
            System.exit(0);
        }
        else if (evento.getSource()==enviar)
        {
            //Primero limpiamos el panel
            panelGlobal.removeAll();
            panelGlobal.repaint();
            //pruba
            
                    
        }
    }
    public static void main (String ar[])
    {
        FormularioConScrollCheckBottonsETC 
                v1
                =
        new FormularioConScrollCheckBottonsETC ();
    }

}
  #2 (permalink)  
Antiguo 20/04/2014, 05:23
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Reconstruir JPanel con Swing

Hola:

Imagino que has hecho el repaint() después de añadir los JLable. Mira si al redimensionar la ventana con el ratón aparecen los JLabel. Si es así, despues de añadirlos, llama al método updateUI() del panel, que obliga a un repintado más fuerte que el repaint().

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 21/04/2014, 19:39
 
Fecha de Ingreso: abril-2014
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Reconstruir JPanel con Swing

Hola.

Antes de destruir el contenido mejor por que no solo cambias te jpanel a uno en donde estará un jTextField que muestre el resultado?

Busca en google "cardlayout java": en pocos detalles con eso agarras un jPanel, le das que tenga una capa de tipo baraja (contendra varios jPane dentro pero solo se mostrará uno a la vez), y luego cuando el usuario presione Ok solo cambiará de jPanel. Te paso un poco de codigo, solo reemplaza el jPanel por el nombre de tu jPane que contendrá el formulario y la respuesta, cuando los agreges manualmente (con Netbeans) a cada jPanel agregado le dará un nombre, puedes revisar que nombre tiene cada uno en el codigo que autogenera Netbeans, esto para que cuando presionen Ok le digas a que jPanel cambiar.

1. a un jPanel le modificas su layout a cadLayout
2. metes todos los jPanel que desees dentro del primero
3. creas el boton de cambio
4. en el boton pones lo siguiente pero dependiendo de tu contexto

CardLayout paletas = (CardLayout)jPanel.getLayout();
switch(informacion){
case 1: paletas.show(jPanel, "card1" ); informacion++; break;
case 2: paletas.show(jPanel, "card2" ); informacion++; break;
}
case 3: paletas.show(jPanel13, "card4" ); informacion = 1;
  #4 (permalink)  
Antiguo 24/04/2014, 04:56
 
Fecha de Ingreso: noviembre-2012
Mensajes: 53
Antigüedad: 12 años
Puntos: 1
De acuerdo Respuesta: Reconstruir JPanel con Swing

Buenas gracias a los dos por la respuesta.
Ambas son válidas así que me las he apuntado las dos.
Mi formulario funciona correctamente con las dos.

Un saludo gracias gente.


Etiquetas: jpanel, string, swing, variable
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 08:14.