Estoy creando una clase que me debe crear un JFrame, al cual quiero dar un Layout del tipo BorderLayout. Luego, esta clase que me crea el JFrame debe crear dos instancias de una clase interna. Esta otra clase de la que hablo, hereda de JPanel, de modo que lo que está haciendo al crear dos instancias de ella es crear dos paneles, para luego añadirlos a mi JFrame (el primero en la zona Norte del JFrame y el segundo en la central). El problema es el siguiente... cuando el programa se inicia y salta el JFrame... el único panel del mismo que se ve es el primero que agregué, el de arriba. Para que aparezca el segundo necesito cambiar el tamaño de la ventana arrastrando con el ratón... si creo más paneles y los añado al JFrame, pasa exactamente lo mismo. A partir del primero, el resto solo se ven después de que haya cambiado el tamaño de la ventana. Tras buscar y buscar, entiendo que lo que está ocurriendo es que el método paintComponent solo se está ejecutando cuando añado el primer panel a mi JFrame... he intentado forzarlo (mediante repaint() ) tras añadir el otro panel... pero no funciona.
Codigo Java
Código Java:
Ver original
import java.awt.*; import java.awt.color.*; import javax.swing.*; { private String[] textoBoton = {"Primero", "Anterior","Insertar","Buscar", "Modificar", "Siguiente", "Último"}; public Interfaz() { construirVentana(); } private void construirVentana() { /*Creo el JFrame dandole un titulo*/ /*Agarro los datos del sistema*/ /*Agarro el tamaño de la pantalla*/ /*tomo el ancho de la pantalla*/ int ancho = (int)tamañoPantalla.getWidth(); /*guardo en la variable anchoVentana la medida que representa el 40% del ancho de la pantalla*/ int anchoVentana = (ancho * 40)/100; /*tomo el alto de la pantalla*/ int alto = (int)tamañoPantalla.getHeight(); /*guardo en la variable altoVentana la medida que representa el 40% del alto de la pantalla*/ int altoVentana = (alto * 40)/100; /*Le digo a mi JFrame que su ancho y alto serán iguales al 40% de la pantalla*/ ventana.setSize(anchoVentana, altoVentana); /*Coloco el JFrame en el centro de la pantalla*/ ventana.setLocation((ancho/2)-(anchoVentana/2),(alto/2)-(altoVentana/2)); /*Le digo al programa que cuando el JFrame se cierre también se cierre él*/ /*Creo un objeto BorderLayout*/ /*Le digo al JFrame que el suyo será un Layout tipo Border*/ ventana.setLayout(bl); /*Introduzco el panel de contenido el JFrame en un Container*/ /*Hago visible al JFrame*/ ventana.setVisible(true); /*Creo un FlowLayout*/ /*Creo un JPanel cuyo Layout será del tipo Flow;*/ ConstruirPaneles cp = new ConstruirPaneles(fl, textoBoton, true, textoEtiqueta, false, false); /*Agrego el nuevo panel a mi Contenedor en su zona norte*/ /*Doy un color al BackGround de mi panel*/ /*Creo un nuevo Layout*/ /*Creo un nuevo panel con el nuevo Layout*/ ConstruirPaneles cp2 = new ConstruirPaneles(gl, textoBoton, false, textoEtiqueta, true, true); /*Agrego el panel a mi Contenedor.*/ } @SuppressWarnings("serial") { private boolean textField, etiquetas, botones; public ConstruirPaneles(LayoutManager layoutPanel, String[] textoBotones, boolean botones, String[] textoEtiquetas, boolean etiquetas, boolean textField) { this.layoutPanel = layoutPanel; this.textoBotones = textoBotones; this.textoEtiquetas = textoEtiquetas; this.textField = textField; giveLayout(); if(botones) { crearBotones(); } if(etiquetas) { crearEtiquetas(); } } { super.paintComponent(g); } public void giveLayout() { this.setLayout(layoutPanel); } { add(etiqueta); if(textField) { crearCampoDeTexto(); } } { add(boton); } public void crearEtiquetas() { for(int i = 0; i<textoEtiquetas.length; i++) { anadirLabel(lb); } } public void crearBotones() { for(int i = 0; i<textoBotones.length; i++) { anadirButton(btn); } } { add(campoTexto); } public void crearCampoDeTexto() { anadirTextField(tf); } } }