Hola a todos, estoy portando una aplicación de java swing a javaFX, la estructura de paquetes que estoy siguiendo es parecida:
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:
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();
}
}
¿Es seguro el uso de static para que sea accesible?, ya que seguramente mas adelante me encontrare casos similares.
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);