Passagem de dados de uma tela para outra com JavaFX

tenho duas telas e preciso passar um dado de uma tela para um TextField de outra tela. tenho um evento num botao onde chamo a nova tela:
@FXML
public void enviarEmail() throws IOException {
Contato cont= listaDeContatos.getSelectionModel().getSelectedItem();
Stage stage = new Stage();
Pane root = FXMLLoader.load(getClass().getResource("/org/com/view/EnviarEmail.fxml"));
Scene scene = new Scene(root,600,400);
stage.setTitle(“Enviar E-Mail”);
stage.setScene(scene);
stage.show();
}
como faço para passar o dado para o TextFild???

1 curtida

A forma que vc está fazendo na minha opinião não é correta, vc precisa ter uma classe de controle de cada TELA. pq se vc criou um textField no fxml, como vc vai representar ele sem uma classe de controle?
1º Crie uma classe de Controle para essa tela EnviarEmail.
2º Crie um método na classe de controle q passar o dado para seu TextField.
3º Ao usar o javaFX procure smp utilizar o padrão MVC.
veja: Tutorial javaFX 8

1 curtida

Jean vlw, eu estou usando uma classe de controle pra cada tela, só que preciso passar um id por paramento pra essa nova tela, ai que estar minha dificuldade

Sim, mas qual id? vc fala o id que identifica o componente?

não não. Imagina que tenho uma tela que o usuário informa seu nome e tenho um botão em que ao ser acionado abra outra tela dando bom dia por exemplo com o nome informado na primeira tela.Preciso passar um dado, e não sei como posso fazer isso

É bem simples amigo, crie um método na classe de controle q faça isso ex:
Classe de controle SegundaTela:

   public void pegarDados(String nome){
         this.textFieldDa2Tela.setText(nome); 
}

Classe onde vc chama o a segunda tela, seu código deve está uma parte mais ou menos assim:

    //código anteriores
       SegundaTelaController controle = carregar.getController(); // carregar e o FXMLLoader
       controle.pegarDados(this.textFieldDa1Tela.getText());
       this.segundaTela.show(); // segunda tela é um Stage.

Já tentei fazer isso mas ele me retorna esse erro
Caused by: java.lang.reflect.InvocationTargetException
Caused by: java.lang.NullPointerException

Jean achei a solução conseguir aqui a solução olha o que eu fiz: na primeira classe de controller que é responsável pela primeira tela criei uma variavel do tipo static final StringProperty e dou um bind nela quando o usuario clica numa linha da tabela, ai criei um método que retorna essa variavel no formato de String:

   public String retornaEmail(){

        return emailTeste.get();

  } 

ai na segunda classe de controler criei um metodo que vc falou

    public void pegarEmail(String nome){

	  this.campo.setText(nome);

   }

e no metodo initialize da segunda classe control chamei o método acima passando como paramento o retorno do método da primeira classe

private void initialize() {
    c = new ControllerTelaPrincipal();
     pegarEmail(c.retornaEmail());
}

ai deu certinho. Muito obrigado pela ajuda!!!

3 curtidas

Fico feliz que vc tenha encontrado a solução :smile:

1 curtida

kkkk Muito obrigado

1 curtida

Pessoal me ajuda ai…

eu tenho a tela 1 com o botão pesquisar que abre a tela 2, nessa ação ele é aberto uma tela de pesquisa(Tela2) e a tela 1 fica lá aberta (ela não fecha) daí eu faço a pesquisa(na tela2) seleciono a linha pego o valor e quero jogar para a tela1.

Tipo eu consigo jogar da tela1 para a tela2, mais da tela2 para a tela1 não (porque a tela1 já encontrasse aberta )

Olá, da pra resolver com interfaces, veja essa resposta que dei em um outro tópico. Abra um tópico pra sua pergunta.

com JavaFX da pra fazer assim ?

Sim basta passar a instância da interface para o Controller da tela.

tentei de todas as maneira e nada =/