Agregar componentes dinamicamente en JPanel - No Refresca
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.
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.
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.
Los demas componentes no dan problema.
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
{
/* 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
