Foro de elhacker.net

Programación => Java => Mensaje iniciado por: tollis en 1 Septiembre 2015, 22:14 pm



Título: Problema JCombobox
Publicado por: tollis en 1 Septiembre 2015, 22:14 pm
Buenas amigos,

Veréis estoy trabajando con una aplicación de escritorio pero tengo un problema un combobox, os explico un poquito.

Tengo un array de objetos de unos clientes (nombre, apellidos, dni, etc), a partir de ahí recorro ese array y lleno el combo con los nombres tal que:

Código:
for(int i = 0; i< clientearray.size(); i++){
comboBox.addItem(clientearray.get(i).getNombre());
}

después de trabajar con los clientes (modificar, eliminar, etc) quiero mantener el combo actualizado, había pensado en borrarlo así

Código:
comboBox.removeAllItems();

pero me tira un java.lang.NullPointerException, se que es porque apunta a una direccion que no existe, he probado comboBox.removeAll(); pero no hace absolutamente nada, he leído por hay que se debe trabajar con la clase model, pero no se bien como hacerlo... ¿alguna idea?

Muchas gracias de antemano.

Saludos


Título: Re: Problema JCombobox
Publicado por: someRandomCode en 2 Septiembre 2015, 00:10 am
Si la aplicacion trabaja solo local, es decir, sin una base de datos que trabaje distribuida, lo que podes hacer es llamar a un metodo proxy que mantenga todo actualizado..
En cuanto a que te tire NPE, fijate que debe ser otra cosa porque:
http://docs.oracle.com/javase/7/docs/api/javax/swing/JComboBox.html#removeAllItems%28%29
es una funcion con nothrow...


Título: Re: Problema JCombobox
Publicado por: tollis en 2 Septiembre 2015, 00:21 am
Si es una aplicación solo local, ya intenté crear un método en el que solo se actualizara el combo, pero seguía con el dichoso NPE, he observado por otros foros y la solución mas factible es con model, pero ahí es donde no avanzo.... ¿o conocéis alguna otra manera de hacerlo? la mayoría de casos que he visto son combos simples de string, nada de coger datos de  arrays ni nada por el estilo, pero debería de funcionar el borrado del combo... no se a que puede ser debido


Título: Re: Problema JCombobox
Publicado por: someRandomCode en 2 Septiembre 2015, 00:28 am
Pasarte a una estructura model-view no es necesario.. Insisto, fijate bien en que linea de codigo te marca el NPE..
Si podes, pone el pedazo de codigo relevante para que te podamos ayudar..


Título: Re: Problema JCombobox
Publicado por: tollis en 2 Septiembre 2015, 21:36 pm
El código es bastante sencillo, aquí lleno el combo

Código:
public void	cargar1(){

for(int i = 0; i< clientearray.size(); i++){
//clientearray es mi array de objetos
comboBox.addItem(clientearray.get(i).getNombre());
clave=clientearray.get(i).getClave();
}
}

Aquí cargo el contenido de unos textfields a partir del nombre seleccionado en el combo

Código:
	public void cargaDatos() {
 
  for(int i = 0; i< clientearray.size(); i++){
    if( comboBox.getSelectedItem().equals(clientearray.get(i).getNombre()))
         {
    Nombre1.setText(clientearray.get(i).getNombre());
    dni1.setText(clientearray.get(i).getDni());
    direccion1.setText(clientearray.get(i).getDireccion());
    poblacion1.setText(clientearray.get(i).getPoblacion());
    cp1.setText(String.valueOf(clientearray.get(i).getCodigop()));
    telefono1.setText(String.valueOf(clientearray.get(i).getTelefono()));
    banco1.setText(clientearray.get(i).getBanco());
    clave1.setText(String.valueOf(clientearray.get(i).getClave()));
         }
   }
}

después realizo cualquier modificación, guardo en array,  borro combo y vuelvo a cargar, y me tira error NPE en la linea

Código:
comboBox.removeAllItems();

Y por supuesto el error se extiende a la llamada a el metodo cargaDatos();


Título: Re: Problema JCombobox
Publicado por: tollis en 4 Septiembre 2015, 00:46 am
Buenas, el problema no me radica en el combo, os explico

Al iniciar el programa llamo a tres métodos

cargararchivo();
cargarNombresCombobox();
cargarDatosTextField();

Que son:

Código:
//CARGAMOS EL ARCHIVO CREADO    
   public static void cargararchivo() {
      try {   
        FileInputStream in = new FileInputStream("card.txt");
        ObjectInputStream ois = new ObjectInputStream(in);
        clientearray = (ArrayList<Cliente>)(ois.readObject());     
      } catch (Exception e) {
        System.out.println("Problemas de serializacion al cargar archivo");
      }
      }   
//CARGAMOS LOS NOMBRES AL COMBOBOX   
   public static void   cargarNombresCombobox(){
      comboBox.addItem("Clientes guardados");
      for(int i = 0; i< clientearray.size(); i++){
      comboBox.addItem(clientearray.get(i).getNombre());
      clave=clientearray.get(i).getClave();         
       }
   }
//CARGAMOS DATOS EN TEXTFIELD   
public static void cargarDatosTextField() {
   comboBox.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {               
            for(int i = 0; i< clientearray.size(); i++){
              if( comboBox.getSelectedItem().equals(clientearray.get(i).getNombre()))
               {
                 Nombre1.setText(clientearray.get(i).getNombre());
                 dni1.setText(clientearray.get(i).getDni());
                 direccion1.setText(clientearray.get(i).getDireccion());
                 poblacion1.setText(clientearray.get(i).getPoblacion());
                 cp1.setText(String.valueOf(clientearray.get(i).getCodigop()));
                 telefono1.setText(String.valueOf(clientearray.get(i).getTelefono()));
                 banco1.setText(clientearray.get(i).getBanco());
                 clave1.setText(String.valueOf(clientearray.get(i).getClave()));
               }
      }   
        }});       
 }       

Pues bien he probado el programa solo con los metodos cargararchivo(); y cargarNombresCombobox(); y funciona perfectamente la limpieza del combo y la posterior carga, es al empezar a utilizar el cargarDatosTextField(); cuando llega el NullPointerException, ¿sabéis por que puede ser?

Muchas gracias


Título: Re: Problema JCombobox
Publicado por: Eleкtro en 6 Septiembre 2015, 16:40 pm
El foro tiene una sección dedicada a Java, debes formular las preguntas correspondientes allá.

Saludos!