Agregar un JLabel en tiempo de ejecución

Iniciado por zonahurbana, 30 Julio 2013, 00:06 AM

0 Miembros y 1 Visitante están viendo este tema.

zonahurbana

¿Cómo puedo agregar un JLabel en tiempo de ejecución?

Es decir, en el momento de que "suceda algo" quiero que aparezca una imagen en una posición determinada.
Quisiera que el JLabel se cree en ese instante y se muestre en una posición que yo elija basándome en datos que se han obtenido en tiempo de ejecución.
No quisiera respuestas como "créalo oculto y luego muéstralo" porque de seguro es posible crearlo al instante, sólo que no tengo idea de cómo  :silbar:

Gracias de antemano ...
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...

1mpuls0

Claro que es posible.

Código (java) [Seleccionar]

private javax.swing.JLabel jLabel1;
.
.
.
//aquí el momento en el que sucede algo

jLabel1 = new javax.swing.JLabel();
       
        jLabel1.setText("jLabel1");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(200, 160, 34, 14);

//se cierra el momento en el que sucede algo

abc

zonahurbana

Muchas gracias por responder.

La verdad es que estoy tratando de hacer el juego de la "Snake" (lo he visto como reto en la sección C++, en donde usan las bibliotecas SDL y Allegro, pero quiero intentarlo con Java en modo GUI usando los JFrame, de paso que aprendo sobre este lenguaje, que lo llevaré como curso el ciclo entrante).

Como aún no he avanzado mucho quiero probar antes cómo serían las funciones para agregar un JLabel y que se muestre (esto sería cuando se ha "comido" un objeto determinado y la Snake debe crecer).

Este es el código que he escrito referente a ello:
Código (java) [Seleccionar]
    private void formWindowOpened(java.awt.event.WindowEvent evt) {                                 
        ArrayList<javax.swing.JLabel> Bloques = new ArrayList<>();
        Bloques.add( new javax.swing.JLabel("/SnakePackage/imgs/body.gif") );
        MyMain.add(Bloques.get(0));
        Bloques.get(0).setLocation(0, 0);
    }     

No estoy totalmente seguro, pero me parece que esta función se activa una sola vez cuando se inicia el programa.
Estoy creando un ArrayList para almacenar allí los JLabel que se vayan creando. Estos JLabel en realidad no contienen texto y son una imagen muy pequeña (10x10px me parece).

Hasta antes conseguía que un JLabel con la misma imagen se moviera (derecha, izquierda, arriba, abajo) según se presionen las teclas correspondientes y allí cambiaba la posición con setLocation(x, y).

El error me dice que un método non-static no puede ser referenciado de un contexto static. ¿Cómo es eso?

Bueno, MyMain es el nombre que le puse al JFrame cuando lo agregué al paquete, pero al parecer no es un JPanel (¿es necesario que cree uno?):
Código (java) [Seleccionar]
public class MyMain extends javax.swing.JFrame
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...

zonahurbana

He conseguido que funcione con:
Código (java) [Seleccionar]
this.getContentPane().add( NOMBRE_DEL_OBJETO );
Tal vez le sea de ayuda a alguien posteriormente...
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...