Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/12/2015, 17:10
maurikius1983
Usuario no validado
 
Fecha de Ingreso: abril-2012
Mensajes: 134
Antigüedad: 12 años, 1 mes
Puntos: 0
Mejor opción New Stage Java FX

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);

Última edición por maurikius1983; 30/12/2015 a las 17:15