Estou tentando a muito tempo tentar passar um objeto de uma tela para outra com o JavaFX, mas sempre diz que o objeto está nulo.
Qual o comportamento dos metodos anotados com @FXM
L e em que momento o metodo
public void initialize(URL fxmlFileLocation, ResourceBundle resources)
é chamado
A tag @FXML dá acesso pro fxml loader em campos/métodos privados, como se, para o fxmlloader estes fossem públicos. O método initializable é chamado pelo fxml loader depois que toda a classe foi carregada (que o objeto foi criado, no caso o controller).
src:
By using a @FXML annotation on
a member, you are declaring that the FXML loader can access the member even if it is private. A public
member used by the FXML loader does not need to be annotated with @FXML.
e
The FXML loader will call the
initialize() method after the loading of the FXML document is complete.
do livro Learn JavaFX 8 do Kishori Sharan
1 curtida
imagino que você construiu sua tela com 3 arquivos… Tela1.java, Tela1Controller.java, e tela1.fxml, certo?
suponha que a tela2 tenha as mesmas especificações. Se seu objeto está armazenado no Tela1Controller.java ele deve ser acessível pelo Tela2Controller.java… O objeto controller (e consequentemente sua variavel) da tela1 pode ser capturado assim…
Método start() da Tela1…
public Tela1Controller controller;
@Override
public void start(Stage stage) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource(this.getClass().getSimpleName() + “.fxml”));
Parent root = (Parent) loader.load();
this.controller = (Tela1Controller) loader.getController(); //Essa é a linha importante, é onde você captura o objeto atual que representa seu controller
Scene scene = new Scene(root);
stage.setScene(scene);
stage.showAndWait();
} catch (Exception ex) {
Alerta.mostra(ex.getMessage());
}
}
Para acessar esse controller da Tela2 fica assim:
Tela1 t = new Tela1();
t.start(new Stage()); //só a partir dessa linha é que o controller da Tela1 estará disponível para você pegar as variáveis dele
t.controller.getVariavelQueEuQuero(); <-- é isso que você quer
1 curtida
Muito obrigado man, isso me ajudou muito.