Ir ao conteúdo
  • Cadastre-se
Fernando Braga Filgueiras

Java Problema com manipulação de dados no Scene Builder

Recommended Posts

Elaborei uma tela no JavaFX Scene Builder coloquei um botão e pedi para mostrar a data atual. Neste mesmo botão elaborei uma codificação para calcular a idade de uma pessoa. Ele simplesmente não mostra a idade numa label nem a data atual em outra label. Como posso resolver?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Fernando Braga Filgueiras  Não manjo de Java, mas creio que ficaria mais fácil pra alguém lhe ajudar se você postasse o código aqui e mandasse um print dessa tela que você criou.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

public class FXMLDocumentController implements Initializable {
    
    @FXML
   
    private Label lblDataatual;  
    private Button btnCalcular;
    private Button btnIdade;
    private TextField txtAnonasc;
    private Label lblIdade;
   
   
    
    
    
    @FXML
    Calendar cal = Calendar.getInstance();
        int ano = cal.get(Calendar.YEAR);
        int anoN = Integer.parseInt(txtAnonasc.getText());
     private void handleButtonAction(ActionEvent event) {
          int mes = cal.get(Calendar.MONTH);
        int dia = cal.get(Calendar.DAY_OF_MONTH); 
        
        int idade = ano - anoN;
        lblDataatual.setText(Integer.toString(dia) + "/" + Integer.toString(mes) + "/" + Integer.toString(ano));
        lblIdade.setText(Integer.toString(idade));
}
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    
    
}

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@Fernando Braga Filgueiras Olá. Até onde pude chegar daria p dar esse resposta abaixo. 

Creio q o uso da classe LocalDateTime seria mais interessante p seu código:

import java.time.LocalDateTime;

public class Calendario {	

    public static void main(String[] args) {
		
        int anoNascimento = 1976;
		
        LocalDateTime d = LocalDateTime.now();		
		
        System.out.println("Usando o LocalDateTime: " + d.getDayOfMonth() + "/" + d.getMonthValue() + "/" + d.getYear());
		
        int dia = d.getDayOfMonth();
        int mes = d.getMonthValue();
        int ano = d.getYear();       		
		
        int idade = ano - anoNascimento;
			
        System.out.println(Integer.toString(dia) + "/" + Integer.toString(mes) + "/" + Integer.toString(ano));
        System.out.println(Integer.toString(idade));
    }
}

Creio q agora seria apenas ajustar a lógica acima em seu código.

Se eu tivesse acesso ao layout (código FXML) q você criou ficaria mais fácil resolver a questão.

Vê se ajuda, ok?

Para imprimir no console usando a lógica acima daria para fazer assim:

System.out.println("Data atual: " + dia + "/" + mes + "/" + ano);
System.out.println("Idade: " + idade +  " anos");

Apenas procurei deixar de tal modo p facilitar o ajuste dessa lógica em seu código.

Obs: Se postar o código do arquivo FXML ajudaria muito!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@Fernando Braga Filgueiras Olá novamente. Resolvi trabalhar em seu código e tudo ok. Funcionou conforme o esperado.

Claro q se eu tivesse acesso ao layout q você criou daria para apresentar uma resposta mais completa.

Mas o código na classe Controller ficou assim:

package application;

import java.time.LocalDateTime;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;

public class Controller {

    @FXML
    private TextField txtAnonasc;

    @FXML
    private Label lblDataAtual;

    @FXML
    private Label lbIdade;

    @FXML
    private Button btnIdade;
    
    private int dia;
    private int mes;
    private int ano;
    private int anoNascimento;
    private int idade;
    private LocalDateTime d = LocalDateTime.now();
    
    @FXML
    private void initialize() {		

    }
    
    public void calcularIdade() {
    	
        anoNascimento = Integer.parseInt(txtAnonasc.getText());
    	
        dia = d.getDayOfMonth();
        mes = d.getMonthValue();
        ano = d.getYear();
    	
        idade = ano - anoNascimento;    	
    	   	
        lblDataAtual.setText(Integer.toString(dia) + "/" + Integer.toString(mes) + "/" + Integer.toString(ano));
    	
        lbIdade.setText(Integer.toString(idade) + " anos");
    	
    }
}

Pelo q vi você criou dois botões. Aí não dá para saber exatamente p quê.

Observação importante: No arquivo fxml q criei, tem a seguinte linha, que diz respeito ao botão onde o usuário clica e aí executa os comandos desejados:

<Button fx:id="btnIdade" layoutX="101.0" layoutY="106.0" mnemonicParsing="false" onAction="#calcularIdade" prefHeight="25.0" prefWidth="142.0" text="Calcular a idade" />

Perceba q nessa linha acima tem esse comando:

onAction="#calcularIdade"

Esse comando se refere exatamente ao método q criei na classe Controller. Ou seja: Ao pressionar o botão, que estou chamando de btnIdade, o código q está no método calcularIdade da classe Controller é executado. Deu p entender a lógica? Se entendeu maravilha!

Se tiver alguma dúvida é só perguntar, ok?

Abraço!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×