Foros del Web » Programación para mayores de 30 ;) » Java »

Mejor opción New Stage Java FX

Estas en el tema de Mejor opción New Stage Java FX en el foro de Java en Foros del Web. 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) ...
  #1 (permalink)  
Antiguo 30/12/2015, 17:10
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
  #2 (permalink)  
Antiguo 31/12/2015, 04:07
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Mejor opción New Stage Java FX

Buenas,

Por eso en el anterior post no te recomendaba hacer la migracion de una aplicacion ya terminada en Swing. Estas intentando migrar una aplicacion hecha en una tecnologia que ya dominas a otra que aun apenas conoces. Y la conversion no es directa, del mismo modo que no se puede hacer una traduccion literal del ingles al español.

Lo mejor seria que comiences una nueva aplicacion siguiendo un buen manual de JavaFX.

Respecto al punto que comentas no veo cual es la diferencia que puede haber respecto a la aplicacion en Swing. Quieres tener una referencia al la ventana principal desde el dialogo que abres? Puedes pasar la referencia por el constructor o al init, no? No es asi como lo haces en Swing?

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 31/12/2015, 05:37
Usuario no validado
 
Fecha de Ingreso: abril-2012
Mensajes: 134
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Mejor opción New Stage Java FX

Hola profesor, como siempre gracias por la respuesta.

La aplicación la he empezado desde 0, lo que he mantenido ha sido la estructura de paquetes, ya que lo veo más claro, por eso pregunto si es correcto o simplemente aplicó el mvc sin dao ni factory.

La dificultad que me encuentro, es que anteriormente cuando creaba una nueva ventana para mostrar datos o ingresarlo, creaba un jdialog y ahora he que crear una nueva stage, y para que dependa de la stage principal hay que poner la primary stage como static, para acceder a ella desde otra. Sino cuando cierras la principal no cierra la secundaria, otra opción es bloquear la principal hasta que cierre la secundaria, pero no me gusta, lo veo muy restrictivo para el usuario final.

Los jdialog no existen en javafx.
  #4 (permalink)  
Antiguo 04/01/2016, 11:07
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Mejor opción New Stage Java FX

Ok ya entiendo. Lo siente, no tengo mucho tiempo.

Echale un vistazo a este tutorial e intenta usarlo como plantilla:
http://code.makery.ch/library/javafx-8-tutorial/

Por otro lado, comentarte que desde Java FX 8 existen unos dialogs muy parecidos a los de Swing (aunque no JDialogs, como bien dices):
http://code.makery.ch/blog/javafx-dialogs-official/

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 04/01/2016, 16:46
Usuario no validado
 
Fecha de Ingreso: abril-2012
Mensajes: 134
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Mejor opción New Stage Java FX

No se preocupe profesor, le entiendo perfectamente. Al final la opción que he elegido es declarar como static la escena principal (primaryStage).

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);
			// Bloque relaciono la ventana padre
			// manageCustomerStage.initModality(Modality.APPLICATION_MODAL);
			// Centro el escenario
			manageCustomerStage.centerOnScreen();
			// muestro el escenario
			manageCustomerStage.show();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
Ya tengo implementado el CRUD completo con buscador, poco a poco se irá avanzando.

Etiquetas: clase, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:53.