Agregar componentes dinamicamente en JPanel - No Refresca

cristiancrm
11 de Diciembre del 2009
Hola, muchachos.

Hace poco que comenc茅 a trabajar con Swing y estoy con una peque帽a aplicaci贸n la cual consiste en lo siguiente:

1 - Posee un JPanel superior llamado "cabecera" el cual contiene un bot贸n.
2 - Posee un JTabbedPane central llamado "tabs" el cual contiene un par de solapas.

El bot贸n simplemente lo que hace es crear el JTabbedPane para posteriormente visualizarlo. El problema se da en cuando trata de hacer esto, por alg煤n motivo no est谩 permitiendo visualizar el JTabbedPane. Pero qu茅 pasa? Si hago un click en el marco de la ventana el JTabbedPane aparece!! Lo l贸gico es que deber铆a aparecer sin hacer click en el marco de la ventana.

El c贸digo es el siguiente:




import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class prueba extends JFrame implements ActionListener {

private JMenuBar mainMenuBar; //Bara de Menu
private JMenu mainMenuBarFile; //Menu File
private JMenu mainMenuBarHelp; //Menu Help

private JPanel cabecera;
private JButton boton;
private JTabbedPane tabs;

private Container myCont;
public prueba(){

mainMenuBar = new JMenuBar(); //Crea la barra de Menu
mainMenuBarFile = new JMenu("File"); //Crea menu File
mainMenuBarHelp = new JMenu("Help"); //Crea menu Help

mainMenuBarFile.setMnemonic('F'); //Shortcut File
mainMenuBarHelp.setMnemonic('H'); //Shortcut Help

mainMenuBar.add(mainMenuBarFile); //Agrega File a MenuBar
mainMenuBar.add(mainMenuBarHelp); //Agrega Help a MenuBar

cabecera = new JPanel(new FlowLayout(FlowLayout.LEFT)); //Crea la cabecera

boton = new JButton("Crear"); //Crea el boton
boton.addActionListener(this); //Agrega gestor de evento
cabecera.add(boton); //Agrega el boton a la cabecera


myCont = this.getContentPane(); //Crea el panel de la ventana
myCont.setLayout(new BorderLayout()); //define un layout
myCont.add(cabecera,BorderLayout.NORTH); //La cabecera va al norte


}

//Main
public static void main(String[] args) {
prueba app = new prueba();
app.showWindow();
}

public void showWindow(){
this.setTitle("prueba");
this.setSize(400,200);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setUndecorated(true);
this.setLocationRelativeTo(null);
this.getRootPane().setWindowDecorationStyle(JRootPane.QUESTION_DIALOG);
this.setJMenuBar(mainMenuBar);
this.setVisible(true);
}
//Gestor de eventos
public void actionPerformed(ActionEvent e) {
myCont.add(crearTabs(),BorderLayout.CENTER); //El tabPanel al centro
}

//Crea el tabPanel
public JTabbedPane crearTabs(){
JLabel label = new JLabel("Panel 1");
JLabel label2 = new JLabel("Panel 2");
tabs = new JTabbedPane();
tabs.addTab("Tab 1", null, label);
tabs.addTab("Tab 2", null, label2);
return tabs;
}
}


Aclaro lo siguiente: No s贸lo pasa cuando intento cargar un JTabbedPane dinamicamente, si no que tambi茅n lo hace con cualquier componente.

Alguien tiene idea de lo que puede ser?

Desde ya agradezco su ayuda.
Un abrazo,
Cristian.

Gepser
11 de Diciembre del 2009
Pues vi tu c贸digo y no encontre el problema exacto, yo lo que haria creo que es tener ya agregado el Jtabed Pane y crearle solo las pesta帽as dinamicamente. De hecho hago eso en varios programas.

Los demas componentes no dan problema.


portos
11 de Diciembre del 2009
public static void main(java.lang.String[] args)
{
/* crear un objeto de la misma instancia */
LogfileDemo aLogfileDemo = new LogfileDemo();
/* Registrar evento para manejar el cierre de la ventana*/
aLogfileDemo.addWindowListener(new WindowAdapter() {public void windowClosed(WindowEvent e) {System.exit(0);};});
// mostrar la ventana
aLogfileDemo.setVisible(true);
}

Es es un modelo de un main de un programa que estoy trbajando depronto te sirva la configuracion