A lo que yo veo en esta parte de tu código, (que repites la misma practica en diversos puntos):
Código Java:
Ver originalprivate void click
(java.
awt.
event.
MouseEvent evt
) { // TODO add your handling code here:
// form1.this.setVisible(false);
form2 f2=new form2();
f2.setVisible(true);
form1.this.dispose();
//form2 f2= new form2();
}
form2 la estas declarando e instanciando cada y que haces el click en ese frame, por lo tanto, ese tipo de variables, deben de ser de instancia y no locales... Que son las variables de instancia? las que declaras hasta arriba "globales" para toda la clase...
asi en esa parte no defines la variable solo seria f2 = new Form(); .....
Aún asi, puede ser que no debas crear la instancia en ese bloque, creala en otro lado por ejemplo en el constructor de clase y en esa parte del click, lo unico que haces es un f2.setVisible(true)... solo la muestras ya que la tienes creada....
Estando en el form3 para regresar al form2 necesitas pasar un objeto de f2 (ya inicializada) al constructor de f3.. asi en cualquier momento para regresar haces un f3.setVisible(false) y despues miObjetodeF2.setVisible(true), y como vez no crea un "new"....
Todo esto lo puedes evitar diseñando correctamente tu aplicación, se recomienda que JFrame solo debe existir uno, y debe ser el principal de tu aplicación, todas las demás ventanas que requieras deberían ser JDialog... de esta manera el JDialog es un hijo de JFrame asi que en el momento que se quiera regresar al JFrame solo haces un "Dispose" al Dialog...