Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Añadir controles en tiempo de ejecución

Hola Javeros:

Soy novato en Java y estoy tratando de hacer que, al pulsar un botón se cree un nuevo JPanel y se muestre en pantalla. Cuando eso me funcione ya añadiré controles al JPanel.
El código que estoy usando es éste, dentro de el evento click de un JLabel.


JPanel nuevoPanel = new JPanel;
nuevoPanel.setSize(200,200);
nuevoPanel.setVisible(true);
PanelPrincipal.add(nuevoPanel);
PanelPrincipal.Repaint(); //no recuerdo ahora si es repaint o paint, pero por el
hecho ahora lo mismo da. (ni siquiera estoy seguro de que sea necesario)


El código lo pongo de memoria ya que lo borré probando otras cosas, pero en todo caso he puesto mal alguna mayuscula/minúscula y como mucho falta algún paréntesis.

Lo que quiero es que al pulsar con el ratón encima de esa etiqueta se añada un JPanel al formulario (es para crearme unos menús más visuales que el JMenu que se ha quedado viejo.

¿Hay que hacer algo especial para poder añadir controles al JFrame en tiempo de ejecución?
Gracias.

febrero 20, 2012 | Registered Commentermarcmiralles

Si ya tienes el panel con algún contenido, tienes que eliminar lo que hay con removeAll() y poner lo nuevo luego. Aparte de esto todo te tendría que funcionar.

febrero 20, 2012 | Registered Commenterjordibr7

Gracias jordibr7:

¿y eso quiere decir que para añadir un control en tiempo de ejecución tengo que borrar antes todos los que hay y volverlos a agregar?

De ser así tal vez me interesará más poner los controles con el setVisible a false y luego irles haciendo visibles cuando los necesite. Al menos para este caso ya que se trata de la página inicial de la aplicación y hay bastantes controles.

De todos modos no entiendo esa lógica. Imagina que tengo un jPanel con una imagen de fondo, una Radiografía por ejemplo y quiero poder poner marcas en la radiografía que sean Jlabels. No le veo el sentido a tener que borrar cada vez todas las marcas para cargarlas luego y añadir una más.

¿Me podéis decir donde me pierdo con mi lógica? ¿ no sería más fácil poder añadir un objeto sin tener que limpiar todos los que haya?

febrero 20, 2012 | Registered Commentermarcmiralles

Disculpa por confundirte, entendí que querías cambiar la interfaz completa de nuevo. Por esto te advertí que eliminaras todo el contenido antes. Si solo quieres agregar contenido no tienes que llamar a removeAll. Si agregas componentes y con repaint no pinta bien la interfaz, llama al método invalidate().

Con invalidate mira si hay algún cambio de composición y en caso necesario pinta de nuevo la interfaz.

febrero 21, 2012 | Registered Commenterjordibr7

Funcionó con algunos objetos y depende de la clase que se instancia, pero seguramente será que tendré algo mal en esas clases ya que en las demás sí funciona, gracias.

febrero 21, 2012 | Registered Commentermarcmiralles