Problema JCombobox

Iniciado por tollis, 1 Septiembre 2015, 22:14 PM

0 Miembros y 1 Visitante están viendo este tema.

tollis

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:


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í


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

someRandomCode

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...

tollis

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

someRandomCode

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..

tollis

El código es bastante sencillo, aquí lleno el combo


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


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


comboBox.removeAllItems();


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

tollis

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:


//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

Eleкtro

El foro tiene una sección dedicada a Java, debes formular las preguntas correspondientes allá.

Saludos!