Pegar dos de um TextField (JavaFX)

5 respostas
luizpicolo

Bom dia. Sou iniciante com o Javafx e para isso estou criando uma agenda para testar alguns conhecimento.
Para criar a interface gráfica da agenda utilizo o Scene Builder, o qual gostei muito e aparentemente, e até agora, satisfez grande parte das minhas expectativas.
Queria saber como pegar os dados de um campo de texto - textfield.

Essa é a parte do Controller da minha agenda.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.luizpicolo.controller;

import br.com.luizpicolo.dao.CompromissoDAO;
import br.com.luizpicolo.model.CompromissoModel;
import br.com.luizpicolo.gui.Agenda;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.stage.Stage;
import javax.swing.JOptionPane;

/**
 *
 * @author w3case
 */
public class AgendaController {

    @FXML
    // Método que instancia uma novo objeto do tipo dialogoAdicionar
    public void executarAcaoAdicionar() {
        try {
            new Agenda().dialogoAdicionar(new Stage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    @FXML
    public void executarAcaoFechar() {
       try {
            new Agenda().dialogoFechar(new Stage());
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }
    
    public void adicionarContato() {

        // Criamos o objeto compromisso
        CompromissoModel compromisso = new CompromissoModel();
        compromisso.setTitulo("Titulo de Teste");
        compromisso.setDataCompromisso("2013-05-10 10:00:00");
        compromisso.setObservacao("Aqui vai um pequeno texto para uma observação do compromisso");

        // Criamos o DAO
        CompromissoDAO dao = new CompromissoDAO();
        if (dao.adicionarContato(compromisso)) {
            JOptionPane.showMessageDialog(null, "Sucesso");
        } else {
            JOptionPane.showMessageDialog(null, "Erro ao adicionar compromisso");
        }
    }
}

Neste caso, onde tem os dados, viriam os dados da interface.
OBS: Estou usando FXML.

5 Respostas

Valkyrium

Boa tarde Luiz!

Bom, vamos por partes...

Primeiro, você precisa identificar esta sua classe controller com a interface Initializable, fazendo sua class ficar assim:

public class AgendaController implements Initializable {

...

}

O Java fará você subescrever o método initialize desta interface, neste método deve ficar todas as implementações de cada componente, inicialmente.

Segundo, você deve criar cada instância de componente, anotando com @FXML.
IMPORTANTE: Seu componente deve ter o MESMO nome que o ID no Scene Builder.
Exemplo:

@FXML
private TextField txTeste;

O interessante é que você não necessitar instanciar a variável, pois a Annotation @FXML fará isto implicitamente.

Terceiro, você deve abrir o seu arquivo FXML, e colocar na AnchorPane principal, o caminho da sua classe controller.
Exemplo:

<AnchorPane ... ... ... fx:controller="br.com.luizpicolo.controller.AgendaController">

Isto é importantíssimo para identificar qual o controller da sua tela.

Então, você pode utilizar o método getText() do TextField, para retornar o conteúdo do campo de texto, através do clique de um Button, por exemplo.

Acho que este link pode vir a ajudar:

[url]http://docs.oracle.com/javafx/scenebuilder/1/get_started/jsbpub-get_started.htm[/url]

Espero que tenha ajudado!

Abraços! :D

Valkyrium

DICA: Mova seu tópico para o fórum “RIA - Flex, JavaFX e outros”

Acho que seria bom! :smiley:

luizpicolo

Meu amigo perfeito. Eu mative esse tópico aqui porque acreditva que, como era iniciante, aqui seria o local mais indicado.
Um outra dúvida. Para que server a implementação do Inizializable? Digo isso porque fiz a classe controller e a mesma funcionou corretamente, ou pelo menos até onde eu percebi, sem esse implementacao.

Tenho outras dúvidas, mas as criarei no topico indicado.

Grande abraço.

Valkyrium

Então Luiz, a classe implementada do Initializable indica que esta classe é verdadeiramente um Controller de alguma tela. Por isto que o uso do Scene Builder acarreta na criação de duas classes: a Application (contém as propriedades da tela e a executa) e a Initializable (controla os componentes e ações da tela), é possível juntar estas duas classes em uma, fazendo uma “public class Test extends Application implements Initializable”, mas isto não é uma boa prática, pois quebra a manutenibilidade do seu código.

O método initialize desta interface é importante para implementação de propriedades de itens da tela, em seu início. Seria semelhante ao método main em classes Java normais. O que tiver escrito ali, será executado primeiro…

luizpicolo

Bem explicado…
Grande abraço e obrigado por suas respostas.

Criado 21 de maio de 2013
Ultima resposta 22 de mai. de 2013
Respostas 5
Participantes 2