Hola. Lo que yo hago es que dentro del constructor de mis clases meto todo el código necesario para generar la ventana y desde el método actionPerformed en la ventana desde la cual quiero abrir mi otra ventana, llamo al constructor de su clase.
Digamos que tienes tu clase Menu y tu clase Ventana1, lo que hago es que desde el método actionPerformed de Menu llamo al constructor de Ventana1 de la siguiente manera:
Código PHP:
// Esto estaría en la clase Menu
public void actionPerformed(ActionEvent e) {
if(e.getSource() == acd) {
new Ventana1().pack();
}
}
Donde acd es el nombre de la variable de mi JButton (todo esto en swing) y le estoy indicando que si se presiona el botón cuya variable corresponde al nombre acd quiero que me llame al constructor de Ventana1 que está en el mismo paquete. El método pack() es para que abra la ventana de tal manera que todos los componentes se puedan ver, es decir, abre la ventana a un tamaño en que todos los componentes de la ventana estén visibles, puestos cada uno en su lugar. En Ventana1 tú podrías darle el tamaño que desees por ejemplo 800x600.
Ojalá te sirva y me haya explicado
Saludos