Crear controles desde un método en java

He aprendido a crear controles por código. El código lo e puesto en un método y luego este método lo llamo en el constructor del JFrame, así:
public class IUPrincipal extends javax.swing.JFrame {
    public IUPrincipal() {
       initComponents();
       crear();
    }
    public void crear(){
       mEtiquetas=new JLabel();
       mEtiquetas.setName("Nombre");
       mEtiquetas.setBounds(160, 20, 100 ,50);
       mEtiquetas.setVisible(true);

       this.add(mEtiquetas); 
    }

Y funciona bien, asi cuando ajecuto se crea automaticamente el JLabel
El problema es que ahora quisiera llamar al método desde un botón, para que se creara el JLAbel al presionar dicho botón, así:
private void btnCrearEtiquetaActionPerformed(java.awt.event.ActionEvent evt) { 
   crear();

Pero no funciona

1 Respuesta

Respuesta
1
¿Podrías poner tu código entero?
El codigo es simple, el JFrame se llama IUPrincipal y el JButton btnCrear
package Presentacion;
import javax.swing.JLabel; 
public class IUPrincipal extends javax.swing.JFrame {
    JLabel mEtiqueta; 
    public IUPrincipal() {
       initComponents();
       crear(); //AQUI SI LOGRA CREAR LA ETIQUETA
    }
   public void crear(){
       mEtiqueta=new JLabel();
       mEtiqueta.setName("Etiqueta_01");
       mEtiqueta.setBounds(160, 20, 100 ,50);
       mEtiqueta.setVisible(true);
       this.add(mEtiqueta);
  }
}
private void btnCrearEtiquetaActionPerformed(java.awt.event.ActionEvent evt) {
      crear(); //AQUI NO LOGRA CREAR LA ETIQUETA

El botón btnCrear solo lo jale del panel de herramientas y lo puse en el JFrame, pero el JLabel "mEtiqueta" si lo estoy creando por código, como te digo, si llamo el método "crear()" en el constructor del JFrame lo crea el JLabel, pero si lo llamo en el evento del botón, no lo hace... creo que tiene que ver con la linea this.add(mEtiqueta), pero no se como solucionarlo
Haz una prueba: llama a this.getContentPane().add(mEtiqueta);
¿Tu JFrame no tiene definido ningún layout?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas