Java - multiples componentes en un for

   
Vista:

multiples componentes en un for

Publicado por jose (17 intervenciones) el 07/01/2016 21:37:43
hola tengo una aplicacion que debe de armar un texto segun seleciones checkbox´s
son 10 checkbox llamasdos igual pero enumerados(chek1,chek2,etc...), que agregan o quitan una palabra x segun los selecciones, como todos tendrian el mismo codigo quiero saber si lo puedo reducir con un for algo asi

1
2
3
4
5
for(int n=1;n==10;n++){
            if(checkboxn.isSelected()==true){
                txtoracion+=checkboxn.getText();
            }
        }

se puede solo poner el nombre que todos comparten y de alguna forma que detecte el numero para que se cambie de componete
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

multiples componentes en un for

Publicado por Marcelo (47 intervenciones) el 07/01/2016 22:03:44
Para lograrlo tienes que usar Reflection.

Con esta clase podrás obtener el componente que tenga el nombre que quieres.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.awt.Component;
import java.awt.Window;
import java.lang.reflect.Field;
 
/**
 *
 * @author mzepedeo
 */
public class Awt {
 
 
    /**
     * attempts to retrieve a component from a JFrame or JDialog using the name
     * of the private variable that NetBeans (or other IDE) created to refer to
     * it in code.
     * @param <T> Generics allow easier casting from the calling side.
     * @param window JFrame or JDialog containing component
     * @param name name of the private field variable, case sensitive
     * @return null if no match, otherwise a component.
     */
    @SuppressWarnings("unchecked")
    static public <T extends Component> T getComponentByName(Window window, String name) {
 
        // loop through all of the class fields on that form
        for (Field field : window.getClass().getDeclaredFields()) {
 
            try {
                // let us look at private fields, please
                field.setAccessible(true);
 
                // compare the variable name to the name passed in
                if (name.equals(field.getName())) {
 
                    // get a potential match (assuming correct &lt;T&gt;ype)
                    final Object potentialMatch = field.get(window);
 
                    // cast and return the component
                    return (T) potentialMatch;
                }
 
            } catch (SecurityException | IllegalArgumentException
                    | IllegalAccessException ex) {
 
                // ignore exceptions
            }
 
        }
 
        // no match found
        return null;
    }
}

y si la aplicas a tu código la puedes usar de la siguiente forma:

1
2
3
4
5
6
for(int n=1;n==10;n++){
            JCheckBox checkBox = Awt.getComponentByName(this, "jComboBox" + n);
            if(checkbox.isSelected()==true){
                txtoracion+=checkbox.getText();
            }
        }

Probalo y me contas.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

multiples componentes en un for

Publicado por Tom (908 intervenciones) el 08/01/2016 11:52:38
Ome, se puede hacer con reflection pero ¿ para qué complicar lo que es simple?

Los checkbox estarán incluídos en algún tipo de Container (si no no se visualizarían), y Container tiene (como es lógico e intuitivo) un método que devuelve la lista de sus componentes.

Y, por cierto, hay muchas maneras mejores de hacer esto (por ejemplo manteniendo un bitset que se actualice con un evento de cada checkbox o manteniendo los checkboxes en un array -o ArrayList- ordenado).

1
2
3
4
5
6
7
8
9
10
11
Component comps[] = getComponents();
 
for(int i = 0; i < 10; i++) {
  for(Component c : comps) {
     if(c.getName().equals("check" + (i + 1)) && (c instanceof AbstractButton)) {
       if(((AbstractButton)c).isSelected()) {
         churro += c.getText();
       }
     }
  }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

multiples componentes en un for

Publicado por Marcelo (47 intervenciones) el 08/01/2016 13:01:32
La dificultad es relativa, pero puedes adaptar la clase para poder buscar cualquier variable en cualquier objeto (y así dejarla genérica para futuros problemas similares).

Abrazo y me alegra que resolvieras el problema
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

multiples componentes en un for

Publicado por jose (17 intervenciones) el 10/01/2016 08:06:31
Tom pose tu codigo asi, pero tambien me marca error si me imprime i, pero enseguida marca error tampoco me deja usar el metoo getText para c
por cierto tambien tenia el nombre de jComboBox en lugar de jChecBox

1
2
3
4
5
6
7
8
9
10
11
Component comps[] = getComponents();
for(int i = 0; i < 10; i++) {
  for(Component c : comps) {
      System.out.println("i "+i);
     if(c.getName().equals("jCheckBox" + (i + 1)) && (c instanceof AbstractButton)) {
       if(((AbstractButton)c).isSelected()) {
         oracion += "54488444";//c.getText();
       }
     }
  }
}
gracias por su atencion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

multiples componentes en un for

Publicado por Tom (908 intervenciones) el 11/01/2016 12:13:37
((AbstractButton)c).getText()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

multiples componentes en un for

Publicado por jose (17 intervenciones) el 10/01/2016 08:00:21
duda
1
2
3
4
5
6
for(int n=1;n==10;n++){
            JCheckBox checkBox = Awt.getComponentByName(this, "jComboBox" + n);
            if(checkbox.isSelected()==true){
                txtoracion+=checkbox.getText();
            }
        }
el "jComboBox" es suponiendo que asi se llamen los checkbox o que onda
porque no me funciona puse un System.out.printl empezando el for y nisiquiera lo imprime
tu codigo dice primero que se llama checkBox y luego en el if se llama checkbox son la misma variable?
por sierto si cree aparte la clase awt no me marca ningun erro e codigo pero no corre
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

multiples componentes en un for

Publicado por Marcelo (47 intervenciones) el 10/01/2016 14:43:26
Mis disculpas, se nota que en el momento de responder tu pregunta estaba luchando con unos combos. Tu apreciacion es correcta, ese jcombobox hace referencia al nombre que tienen tus componentes(lo correcto es jCheckBox), lo tienes que escribir identico a los nombres que le pusiste a tus componentes, asi cuando le agregas el n, la clase awt encontrara el checkbox con el nombre dado y te lo devolvera y asi tu podras hacer lo que necesites.

Cualquier duda quedo a las ordenes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar