Applicazione di accesso con 1 stadio e scena multipla in JavaFX
Sto facendo un progetto timeline. Ho creato con successo un sistema di login e menu per tutto, ma quando premo i pulsanti che ho fatto, si aprirà una nuova finestra(con stage, scene). Ho letto che non è l'approccio migliore. Il modo migliore sarebbe avere solo 1 stadio primario, e quello sarebbe quando lancio l'applicazione, il login.
Ma ho cercato informazioni su più scene con uno stadio ma non ho trovato alcuna buona soluzione. Sarebbe davvero apprezzo davvero un po ' di aiuto ;) Spero che tu capisca cosa voglio ottenere. Vale la pena menzionare, i=Ho a che fare con i file Scenebuilder e fxml, quindi tutto quello che voglio fare è caricare un nuovo .scena fxml sul palco primario.
Quindi ho guardato in un altro thread e ho provato a fare un VistaFramework che gestisce tutte le modifiche alla scena. Ma non lo capisco completamente, e non riesco a farlo funzionare.
package application;
import javafx.fxml.FXMLLoader;
import java.io.IOException;
import controllers.MainController;
/**
* Utility class for controlling navigation between vistas.
*
* All methods on the navigator are static to facilitate
* simple access from anywhere in the application.
*/
public class VistaNavigator {
/**
* Convenience constants for fxml layouts managed by the navigator.
*/
public static final String MAIN = "LoginGUI.fxml";
public static final String NEW_USER = "NewUserGUI.fxml";
public static final String STARTMENU = "StartMenuGUI.fxml";
/** The main application layout controller. */
private static MainController mainController;
/**
* Stores the main controller for later use in navigation tasks.
*
* @param mainController the main application layout controller.
*/
public static void setMainController(MainController mainController) {
VistaNavigator.mainController = mainController;
}
/**
* Loads the vista specified by the fxml file into the
* vistaHolder pane of the main application layout.
*
* Previously loaded vista for the same fxml file are not cached.
* The fxml is loaded anew and a new vista node hierarchy generated
* every time this method is invoked.
* @param fxml the fxml file to be loaded.
*/
public static void loadVista(String fxml) {
try {
mainController.setVista(
FXMLLoader.load(
VistaNavigator.class.getResource(
fxml
)
)
);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Ottengo un errore in loadVista (). Ottieni il seguente errore a mainController.setVista ("Il metodo setVista (Nodo) nel tipo MainController non è applicabile per gli argomenti (Oggetto)"
1 answers
Ogni file FXML non è necessariamente una nuova scena.
Un fxml è solo un file di visualizzazione con il suo root element
come uno qualsiasi dei layout forniti da Javafx. Può avere più layout (come parte del layout principale) e controlli a seconda delle esigenze.
Per saperne di più su fxml, è possibile visualizzare
Per maggiori informazioni clicca qui. Quale è il modo migliore di programmare in JavaFX?
Tutorial su FXML
Http://docs.oracle.com/javafx/2/fxml_get_started/jfxpub-fxml_get_started.htm
Ora, una volta che il tuo FXML è pronto, puoi caricarlo in diversi modi:
- Carica come radice della tua scena
- Carica come parte del LAYOUT già caricato
- Carica come radice della nuova Scena e assegnala alla fase corrente
Per aiutarti a capire i punti precedenti ecco un esempio per ciascuno di essi. Qui, sto dimostrando un LoginController
classe che è un controller per caricare il FXML
.
Esempio - 1
FXMLLoader loader = new FXMLLoader(LoginController.class.getResource("root.fxml"));
AnchorPane login = (AnchorPane) loader.load();
Scene scene = new Scene(login);
Esempio - 2
FXMLLoader loader = new FXMLLoader(LoginController.class.getResource("root.fxml"));
AnchorPane login = (AnchorPane) loader.load();
BorderPane borderPane = (BorderPane)scene.getRoot();
borderPane.setCenter(login);
Esempio - 3
FXMLLoader loader = new FXMLLoader(LoginController.class.getResource("root.fxml"));
AnchorPane login = (AnchorPane) loader.load();
Scene scene = new Scene(login);
stage.setScene(scene);//Stage loads the new scene, which has the layout of the fxml
N.B. Per maggiori dettagli su come accedere a Stage/Scene
su diversi controller si prega di passare attraverso