Foro de elhacker.net

Programación => Java => Mensaje iniciado por: zonahurbana en 30 Julio 2013, 00:06 am



Título: Agregar un JLabel en tiempo de ejecución
Publicado por: zonahurbana en 30 Julio 2013, 00:06 am
¿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 ...


Título: Re: Agregar un JLabel en tiempo de ejecución
Publicado por: 1mpuls0 en 30 Julio 2013, 00:17 am
Claro que es posible.

Código
  1. private javax.swing.JLabel jLabel1;
  2. .
  3. .
  4. .
  5. //aquí el momento en el que sucede algo
  6.  
  7. jLabel1 = new javax.swing.JLabel();
  8.  
  9.        jLabel1.setText("jLabel1");
  10.        jPanel1.add(jLabel1);
  11.        jLabel1.setBounds(200, 160, 34, 14);
  12.  
  13. //se cierra el momento en el que sucede algo
  14.  
  15.  


Título: Re: Agregar un JLabel en tiempo de ejecución
Publicado por: zonahurbana en 30 Julio 2013, 00:46 am
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
  1.    private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
  2.        ArrayList<javax.swing.JLabel> Bloques = new ArrayList<>();
  3.        Bloques.add( new javax.swing.JLabel("/SnakePackage/imgs/body.gif") );
  4.        MyMain.add(Bloques.get(0));
  5.        Bloques.get(0).setLocation(0, 0);
  6.    }    
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
  1. public class MyMain extends javax.swing.JFrame


Título: Re: Agregar un JLabel en tiempo de ejecución
Publicado por: zonahurbana en 30 Julio 2013, 21:56 pm
He conseguido que funcione con:
Código
  1. this.getContentPane().add( NOMBRE_DEL_OBJETO );
Tal vez le sea de ayuda a alguien posteriormente...