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
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...
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
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..
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();
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
El foro tiene una sección dedicada a Java, debes formular las preguntas correspondientes allá.
Saludos!