Otro pdf...puff
Si, en cuanto a la forma de realizar la llamada al método si, estas en lo cierto.
Pero ten paciencia con el tiempo sabrás identificar cuando usar static y cuando no. Mi recomendación en principio es:
-Usa static en un método cuando dentro de ese método no se hace uso de ningún atributo de la clase a la cual pertenece el método.
-No uses static cuando dentro del método haya alguna referencia a un atributo de la clase.
Por ejemplo, imagina que tenemos la siguiente clase:
public class Prueba{
public String atributoClase;
public Prueba(String param){
this.atributoClase=param;
}
public String imprime1(){
System.out.println(atributoClase);
}
public static String imprime2(String cadena){
System.out.println(cadena);
}
}
Bueno fíjate en el ejemplo anterior, simplemente es una clase con un atributo(atributoClase) y dos métodos(imprime1() y imprime2(String cadena)).
Como puedes observar el primer método hace uso de un atributo de la clase, por eso no es recomendable crearlo como estático, ya que para eso también habría que convertir el atributo a static y otras implicaciones que con el tiempo aprenderás. Para ejecutar este método tendríamos que proceder como sigue:
public class TestPrueba{
public static void main(String[] arg){
Prueba p=new Prueba("hola"); //creamos el objeto de la clase prueba.
p.imprime1(); //llamamos al método no estático ¡a través! del objeto anteriormente creado.
}
}
Por otro lado, el segundo método(imprime2(String cadena)) recibe una cadena por parámetro y es lo único que necesitará el método para realizar su cometido, al no hacer uso de ningún atributo de la clase, podemos crearlo como estático, ya al no hacer uso de ningún atributo de la clase, no es necesario crear un objeto para inicializar estos atributos, ya que el método no requiere de ninguno para llevar a cabo su cometido. Para ejecutar este método se procedería así:
public class TestPrueba2{
public static void main(String[] arg){
Prueba.imprime2("hola"); // llamamos al método estático ¡Directamente! con el nombre de la clase y le decimos que elementos va a usar para trabajar . */
}
}
Esto es lo mas básico en cuanto a la clausula static, aunque hay mas implicaciones por detrás que si me pongo a contarte te aburriría.
Si mas o menos has entendido esto y eres capaz de detectar cuando usar el static y cuando no, creo que es mas que suficiente de momento.
Conforme avances y trabajes te será mas sencillo usarlo.
----------------------------------------------------------------------------------------------------------------------
Ahora, por otro lado, sobre lo del problema que te esta dando, bueno, la verdad que el codigo es bastante extenso y en OO cuesta seguir las trazas, pero a ver te explico lo que yo creo que esta pasando y a ver si puede ser eso.
Tu cuando le das a envíos empiezas a crear una lista de productos, y cuando el usuario termina de añadir productos y valida el envío, esa lista que estabas creando, la añades a otra lista, con lo cual ese envío queda confirmado, creo que lo que te falta a ti es un par de métodos:
1.- Un método para mostrar la lista de envíos, la cual tendrá X listas de productos.(Leer nota de edición).
2.- Un método para poder modificar alguna de las listas de productos que ya esta añadida en la lista de envíos.
Pero claro tu cada vez que le das a envíos, creas una nueva lista de productos y cuando acabas la añades a la lista de envíos. Cuando vuelves a darle a envíos, creas una lista de productos nuevas, que al finalizar, también añades a la lista de envíos. Pero eso, te falta el método para poder ver, todo lo que hay en la lista de envíos.
Me he liado un poco pero espero que me hayas entendido mas o menos.
Bueno, creo que nada mas, siento la extensión de este post, pero cuando me pongo a escribir, por mucho que intento explicar siempre creo que o no queda claro o me faltan cosas, de ahí que haya tanto texto. Bueno pos nada a ver si lo consigues arreglar.
Nota de edición: Estoy tan aburrido que he estado mirando mas a fondo y me he dado cuenta que listaEnvios es una lista de productos, entonces claro, cuando se empieza un pedido y se valida, supongo que lo que harás(No he podido encontrar donde lo haces) será decir que la listaEnvios sea igual a la lista que acabamos de validar. Lo que yo creo que tu querías hacer era una lista de listas de productos, así:
ArrayList<ListaDeProductos> listaEnvios= new ArrayList();
y cada vez que terminarás de rellenar una lista de productos, añadir esta lista a la lista de envíos recientemente validada, así:
listaEnvios.add(listaProductosTemporal);
Con lo cual, tendrías una lista con todos los pedidos que se hayan validado. Pero como listaEnvios es una ListaDeProductos, cada vez que el usuario rellena una lista y la validas, sustituyes lo que había en listaEnvios por esa nueva lista, y por eso se pierde.
La verdad que creo que se que es lo que querías hacer pero no se si me explico bien, bueno a ver si con lo que te escrito hay algo que sirva.