Passagem de dados de uma tela para outra com JavaFX

14 respostas Resolvido
Davi_Almeida
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???

14 Respostas

JeanJavaMan

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

Davi_Almeida

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

JeanJavaMan

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

Davi_Almeida

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

JeanJavaMan

É 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.
Davi_Almeida

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

Davi_Almeida
Solucao aceita

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!!!

JeanJavaMan

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

Davi_Almeida

kkkk Muito obrigado

Paulosilv_123

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 )

Andrauss

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

Paulosilv_123

com JavaFX da pra fazer assim ?

Andrauss

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

Paulosilv_123

tentei de todas as maneira e nada =/

Criado 4 de janeiro de 2016
Ultima resposta 5 de ago. de 2017
Respostas 14
Participantes 4