Paquete Dao (Interfaces CRUD)
Paquete Dto (Los objetos Customer, Employee..)
Paquete SQL (Conexion DB)
Paquete DaoImpl (Las implementaciones CRUD)
Paquete View (FXML y controladores de FXML)
Paquete Factory (Patron factory)
Paquete Assets (Iconos, imagenes...)
Me surgen varias dudas:
1 - ¿Es correcta la estructura? (Se suele utilizar MVC, en realidad si englobo en subpaquetes tendría esa estructura).
2 - Los primeros inconvenientes que me encuentro son a la hora de abrir nuevas ventanas para la introducción de datos, ya que antes con un Jdialog iba bien, ahora creo una stage que depende de otra principal, y para poder acceder a la stage principal, la tengo que declarar como static en el main. os muestro el código
MainApp.java (Clase principal)
Código:
public class MainApp extends Application { // static para que sea accesible static Stage primaryStage; private BorderPane rootLayout; @Override public void start(Stage primaryStage) { this.primaryStage = primaryStage; this.primaryStage.setTitle("Business Management"); initRootLayout(); } public void initRootLayout() { try { // Cargo el layout principal FXMLLoader loader = new FXMLLoader(); loader.setLocation(MainApp.class.getResource("view/MainAppView.fxml")); rootLayout = (BorderPane) loader.load(); // Muestro la scena raiz Scene sceneLayot = new Scene(rootLayout); primaryStage.setScene(sceneLayot); primaryStage.show(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); } }
ManageCustomer.java (Clase secundaria)
Código:
¿Es seguro el uso de static para que sea accesible?, ya que seguramente mas adelante me encontrare casos similares.public void initManageCustomer() { try { // Creo un escenario Stage manageCustomerStage = new Stage(); // Obtengo el diseño FXMLLoader manageCustomerLoader = new FXMLLoader(); manageCustomerLoader.setLocation(MainApp.class.getResource("view/ManageCustomerView.fxml")); // Cargo el layout BorderPane manageCustomerLayout = (BorderPane) manageCustomerLoader.load(); // Creo la escena Scene sceneLayot = new Scene(manageCustomerLayout); // Asigno la escena al escenario manageCustomerStage.setScene(sceneLayot); // Enlazo con la ventana principal manageCustomerStage.initOwner(MainApp.primaryStage); // Aqui es donde accedo a la principal para que dependa // Centro el escenario manageCustomerStage.centerOnScreen(); // muestro el escenario manageCustomerStage.show(); } catch (IOException e) { e.printStackTrace(); } }
PD: Otra opcion es bloquear la ventana principal sin necesidad de acceder a la stage principal con el siguiente código (Pero inicialmente no me gusta mucho).
Código:
// Bloqueo la ventana principal manageCustomerStage.initModality(Modality.APPLICATION_MODAL);