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