Foros del Web » Programación para mayores de 30 ;) » Java »

coger al azar una etiqueta de un arrayList

Estas en el tema de coger al azar una etiqueta de un arrayList en el foro de Java en Foros del Web. Tengo un arrayList de etiquetas(16 en total) y quiero coger una etiqueta al azar, y a esa etiqueta ponerle un texto, un nombre de una ...
  #1 (permalink)  
Antiguo 24/09/2010, 04:02
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 1
coger al azar una etiqueta de un arrayList

Tengo un arrayList de etiquetas(16 en total) y quiero coger una etiqueta al azar, y a esa etiqueta ponerle un texto, un nombre de una persona, mediante el jlabel.setText("nombre"):

Código:
ArrayList etiquetas = new ArrayList();
Aqui en el constructor relleno el arrayList con 16 jlabels:

Código:
etiquetas.add(jLabel1);
etiquetas.add(jLabel2);
etiquetas.add(jLabel3);
etiquetas.add(jLabel4);
......
etiquetas.add(jLabel16);
Aqui os dejo el metodo donde quiero coger la etiqueta al azar y adjudicarle un texto:

Código:
public void adjudicar_numero(){
        Random rand = new Random();
        int x = rand.nextInt(etiquetas.size()); 
        for(int i=0;i<etiquetas.size();i++){
            if(etiquetas.get(i).equals(etiquetas.get(x))){
            }
        }
 }
En X me guardo un numero al azar entre el 1 y el 16, puesto que etiquetas es de tamaño 16. Supongamos que ha salido el 5.

Pues con el for vuelvo a recorrer las etiquetas y en el if compruebo si en la que estoy es la misma que la cogida al hacer que es X.

Si el if se cumple, entonces quiero escribir en esa etiqueta un texto, pero no me deja hacer esto:

Código:
etiquetas.get(i).setText("Nombre");


Me da error en el setText porque me dice que el objeto etiquetas no tiene ese metodo, me dice que "cannot find symbol, symbol: method setText(java.lang.String) location: class java.lang.Object

Logicamente si hago un jlabel1.setText("Nombre") si que me deja...

Entonces, como puedo coger ese jlabel de ese indice???? Como puedo hacer lo que quiero??
  #2 (permalink)  
Antiguo 24/09/2010, 04:12
 
Fecha de Ingreso: abril-2009
Mensajes: 82
Antigüedad: 15 años
Puntos: 2
Respuesta: coger al azar una etiqueta de un arrayList

El problema que tienes es que no has generalizado la lista, por lo tanto, te reconoce que todo elemento dentro de la lista es de tipo Object, y por tanto, no contiene el método setText(""). Para arreglarlo tienes dos opciones:
  1. Si usas una versión de java 1.5 o superior, puedes generalizar la lista: ArrayList<JLabel> etiquetas = new ArrayList<JLabel>(). Con esto, cada vez que recuperes un elemento de la lista, será JLabel y contendrá el método setText("").
  2. En otro caso, y teniendo la versión que quieras, lo que puedes hacer es hacer un casting al objeto recuperado, de tal manera que ((JLabel)etiquetas.get(x)).setText("").

El resto lo dejo a tu elección ;)

Saludos, Squar.

PD: Para recuperar el X-esimo objeto de la lista no tienes que ir comparando dentro de un bucle, con poner etiquetas.get(x) es suficiente... ;)
  #3 (permalink)  
Antiguo 24/09/2010, 04:28
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 14 años
Puntos: 1
Respuesta: coger al azar una etiqueta de un arrayList

Cita:
Iniciado por Squar Ver Mensaje
El problema que tienes es que no has generalizado la lista, por lo tanto, te reconoce que todo elemento dentro de la lista es de tipo Object, y por tanto, no contiene el método setText(""). Para arreglarlo tienes dos opciones:
  1. Si usas una versión de java 1.5 o superior, puedes generalizar la lista: ArrayList<JLabel> etiquetas = new ArrayList<JLabel>(). Con esto, cada vez que recuperes un elemento de la lista, será JLabel y contendrá el método setText("").
  2. En otro caso, y teniendo la versión que quieras, lo que puedes hacer es hacer un casting al objeto recuperado, de tal manera que ((JLabel)etiquetas.get(x)).setText("").

El resto lo dejo a tu elección ;)

Saludos, Squar.

PD: Para recuperar el X-esimo objeto de la lista no tienes que ir comparando dentro de un bucle, con poner etiquetas.get(x) es suficiente... ;)



Muchas gracias Squar. tienes razon, tengo que generalizar la lista, se me habia olvidado. ¬¬

un saludo

Etiquetas: arraylist, etiquetas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:45.