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

Problema con JcheckBox

Estas en el tema de Problema con JcheckBox en el foro de Java en Foros del Web. Hola, estoy haciendo un arreglo de JCheckbox y siempre que ejecuto mi programa recibo este error en tiempo de ejecucion : Código PHP: Exception in thread  "AWT-EventQueue-0"  ...
  #1 (permalink)  
Antiguo 30/01/2011, 15:01
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 2 meses
Puntos: 3
Problema con JcheckBox

Hola, estoy haciendo un arreglo de JCheckbox y siempre que ejecuto mi programa recibo este error en tiempo de ejecucion
:
Código PHP:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException2
    at Asi
.get_JCheck1(Asi.java:341)
    
at Asi.get_Panel2(Asi.java:118
Como podria resolver mi problema?
gracias

desde aqui llamo a mi metodo JCheckBox
Código PHP:
public JPanel get_Panel2()
{
if(
panel2==null)
{
panel2=new JPanel();
panel2.setLayout(null);
panel2.add(get_JCombo());
panel2.add(get_JCheck1());
contenedor.add(panel2);
}
return 
panel2;

Este es mi metodo JCheckBox que me da el error

Código PHP:
public JCheckBox get_JCheck1()
{
  
int contador=0;
if(
checkbox1==null)
{
  
checkbox1=new JCheckBox[2];
for(
contador=0;contador<checkbox1.length;contador++)
{
checkbox1[0]=new JCheckBox("Ingresar");
checkbox1[1]=new JCheckBox("Actualizar");
add(checkbox1[contador]);
}
checkbox1[0].setBounds(10,10,150,30);
checkbox1[1].setBounds(10,10,100,30);
}
return 
checkbox1[contador];

  #2 (permalink)  
Antiguo 31/01/2011, 08:37
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Problema con JcheckBox

bueno, hay varias cosas mal

En el bucle haces los news de los jcheckbox, los dos en cada iteración. Estás haciendo cuatro news de checkbox y sólo guardas los dos últimos. Te sobra el bucle si lo vas a hacer así.

cuando sales del bucle, contador vale 2 (el bucle es 0 y 1). El return checkbox1[contador] es el que te está lanzando la excpecion, ya que sólo son válidos dos elementos, el 0 y el 1, mientras que contador vale 2.

Y aparte de esto, get_JCheck1 sólo puede devuelver uno de los JCheckBox del array.... ¿para qué quieres el otro JCheckBox si no se va a visualizar en ningún sitio?. bueno, si lo visualizas, creo, dentro del bucle haces un add(checkbox[contador]).

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 31/01/2011, 19:16
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 2 meses
Puntos: 3
Respuesta: Problema con JcheckBox

Cita:
Iniciado por chuidiang Ver Mensaje
bueno, hay varias cosas mal

En el bucle haces los news de los jcheckbox, los dos en cada iteración. Estás haciendo cuatro news de checkbox y sólo guardas los dos últimos. Te sobra el bucle si lo vas a hacer así.

cuando sales del bucle, contador vale 2 (el bucle es 0 y 1). El return checkbox1[contador] es el que te está lanzando la excpecion, ya que sólo son válidos dos elementos, el 0 y el 1, mientras que contador vale 2.

Y aparte de esto, get_JCheck1 sólo puede devuelver uno de los JCheckBox del array.... ¿para qué quieres el otro JCheckBox si no se va a visualizar en ningún sitio?. bueno, si lo visualizas, creo, dentro del bucle haces un add(checkbox[contador]).

Se bueno.
Gracias por la respuesta, enr ealidad necesito visualizar los dos JCheckBox y ¿me podrias decir que cambios deberia hacer en mi codigo para que me funcione?
asi declaro mi variable private JCheckBox checkbox1[]=null;

pd:llevo poco tiempo aprendiendo java
  #4 (permalink)  
Antiguo 31/01/2011, 23:01
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Problema con JcheckBox

Quita el for, pero deja el código que hay dentro. Elimina la variable contador.
En get_JCheck1() añade un parametro entero que indica que JCheckBox quieres (el 0 o el 1)

Código:
public JCheckBox get_JCheck1(int indice) 
{ 

   if(checkbox1==null) 
  { 
     checkbox1=new JCheckBox[2];
     checkbox1[0]=new JCheckBox("Ingresar"); 
     checkbox1[1]=new JCheckBox("Actualizar"); 
     checkbox1[0].setBounds(10,10,150,30); 
     checkbox1[1].setBounds(10,10,100,30); 
   } 
} 
return checkbox1[indice]; 
}
en la parte del panel haz dos llamadas a add() llamando a este metodo con 0 y con 1 en el parametro.

add(get_Jcheck1(0));
add(get_Jcheck1(1));

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 01/02/2011, 10:00
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 2 meses
Puntos: 3
Respuesta: Problema con JcheckBox

chuidiang gracias por la respuesta, ahora me funciona todo bien.

Otra consulta, ese mismo metodo se podria realizar de otra manera? por ejemplo

hacer que el metodo devuelva un array con los JCheckBox. Si fuera tú caso: ¿como habrias desarrollado ese metodo para que devuelva JCheckbox?, me gusta conocer distintas opiones
gracias
  #6 (permalink)  
Antiguo 01/02/2011, 10:16
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Problema con JcheckBox

Puedes hacer que el método devuelva un array, entonces tendras que poner [] después de la llamada en vez de pasar el índice como parámetro

add(get_jcheck()[0]);
add(get_jcheck()[1]);

Si fuera yo, para dos checkbox, no habría hecho ni un método ni un array y sobre todo si hacen cosas muy distintas ¿ingresar y actualizar?. Yo dejaría un array si son más elementos o si hacen todos más o menos lo mismo, por ejemplo, los JButton 0 a 9 para los botones de una calculadora.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 01/02/2011, 10:30
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 2 meses
Puntos: 3
Respuesta: Problema con JcheckBox

Cita:
Iniciado por chuidiang Ver Mensaje
Puedes hacer que el método devuelva un array, entonces tendras que poner [] después de la llamada en vez de pasar el índice como parámetro

add(get_jcheck()[0]);
add(get_jcheck()[1]);

Si fuera yo, para dos checkbox, no habría hecho ni un método ni un array y sobre todo si hacen cosas muy distintas ¿ingresar y actualizar?. Yo dejaría un array si son más elementos o si hacen todos más o menos lo mismo, por ejemplo, los JButton 0 a 9 para los botones de una calculadora.

Se bueno.
Entiendo, en realidad uno lo quiero ocupar para ingresar y actualizar sólo que en este caso lo estoy haciendo de esta forma para aprender más sobre metodos y devolver valores, entonces si fuera un proyecto más grande con JCheckBox que hacen cosas diferentes me recomiendas programarlo de esta manera:

Código PHP:
amarilloboton = new JCheckBox("amarillo");
azulboton = new JCheckBox("azul");
rojoboton = new JCheckBox("rojo");


amarilloboton.addActionListener(new ActionListener() {
public 
void actionPerformed(ActionEvent e) {
 
 if(
amarilloboton.isSelected()==true)
 {
hacer algo();
 }
 else{
otra cosa();
 }
}});

azulboton.addActionListener(new ActionListener() {
public 
void actionPerformed(ActionEvent e) {
 
 if(
azulboton.isSelected()==true)
 {
hacer algo();
 }
 else{
otra cosa();
 }
}}); 
alguna cosa como eso )
  #8 (permalink)  
Antiguo 02/02/2011, 01:53
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Problema con JcheckBox

En principio sí, si las cosas que hace cada ActionListener de cada JCheckBox son muy distintas.

Normalmente, si las cosas a hacer no tienen nada que ver unas con otras, los botones/checkbox o lo que sea no tendrán nada o casi nada en común y no serán demasiados botones, por lo que no es descabellado hacerlos uno a uno.

Si fuesen muchos, muchos botones, lo normal es que todos ellos hagan prácitamente lo mismo (botones numéricos de una calculadora, o quizás como en el ejemplo que pones si hubiera 10 colores, lo más probable es que todos hagan lo mismo, cambiando sólo el dato concreto de color). En este caso sí debería ponerse un array para manejarlos más fácilmente y un único ActionListener para todos ellos, que haría una única cosa (pintar la cifra en la pantalla en el caso de la calculadora) con la única diferencia de que el dato que trata es distinto.

Se bueno.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: Ninguno
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 01:20.