Olá, criei este código NetBeans …
public class PjtCalcularIdade {
public static void main(String[] args) {
LocalDate hj = LocalDate.now();
LocalDate nascido = LocalDate.parse("1961-07-18");
if (nascido.compareTo(nascido)<0);{
long diferencaEmMeses = ChronoUnit.MONTHS.between(nascido, hj);
//System.out.println("Tem " + diferencaEmMeses /12 +" anos e " + diferencaEmMeses %12 + " meses");
JOptionPane.showMessageDialog(null,diferencaEmMeses /12);
}
}
… que funciona, com System.out.println ou JOptionPane
A minha ideia era aplicar num Frame … criei o Frame e adaptei o código
btCalcula.addActionListener (new ActionListener() {
public void actionPerformed (ActionEvent e)
{
LocalDate hj = LocalDate.now();
LocalDate nascido = LocalDate.parse(txtNascido.getText());
if (nascido.compareTo(nascido) <0); {
long diferencaEmMeses =ChronoUnit.MONTHS.between(nascido,hj);
}
//lblDisplay.setText(diferencaEmMeses / 12 );
JOptionPane.showMessageDialog(null, diferencaEmMeses /12);
}
mas não compila dá o seguinte erro
TesteCxaText.java:58: error: cannot find symbol
JOptionPane.showMessageDialog(null, diferencaEmMeses /12);
^
symbol: variable diferencaEmMeses
1 error
A ideia é lançar o resultado num label mas não estou a conseguir será possivel ajudar? Obrigado
Esse código rodou aqui e mostrou “55”:
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import javax.swing.JOptionPane;
public class CalcularIdadeEmMeses {
public static void main(String[] args) {
LocalDate hj = LocalDate.now();
LocalDate nascido = LocalDate.parse("1961-07-18");
if (nascido.compareTo(nascido)<0);{
long diferencaEmMeses = ChronoUnit.MONTHS.between(nascido, hj);
//System.out.println("Tem " + diferencaEmMeses /12 +" anos e " + diferencaEmMeses %12 + " meses");
JOptionPane.showMessageDialog(null,diferencaEmMeses /12);
}
}
}
Sim eu sei esse roda, o outro que deve correr num JFrame é que não compila, parece que não encontra a variável diferencaEmMeses.
posta o código desse outro então, que vai rodar no JFrame
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.time.*;
import java.time.temporal.ChronoUnit;
public class TesteCxaText extends JFrame {
public TesteCxaText (){
setLayout (null);
setSize (260,200);
setLocationRelativeTo(null);
setTitle("CALCULAR IDADE");
JLabel lblDisplay = new JLabel("Tem 55 anos e 08 meses");
lblDisplay.setHorizontalAlignment (JLabel.CENTER);
JButton btCalcula = new JButton("Calcular");
JButton btSair = new JButton ("Fechar");
JTextField txtNascido = new JTextField (" ");
getContentPane ().add (lblDisplay).setBounds(20,20,220,30);
getContentPane ().add (txtNascido).setBounds(20,60,220,30);
getContentPane ().add (btCalcula).setBounds(20,100,100,30);
getContentPane ().add (btSair).setBounds(140,100,100,30);
setVisible(true);
btSair.addActionListener (new ActionListener(){
public void actionPerformed (ActionEvent e)
{
System.exit (0);
}
});
btCalcula.addActionListener (new ActionListener() {
public void actionPerformed (ActionEvent e)
{
LocalDate hj = LocalDate.now();
LocalDate nascido = LocalDate.parse(txtNascido.getText());
if (nascido.compareTo(nascido) <0); {
long age = ChronoUnit.MONTHS.between(nascido,hj);
}
// lblDisplay.setText("Tem " + age /12 +" anos e " + age %12 + " meses");
JOptionPane.showMessageDialog(null, age /12);
}
});
}
public static void main(String[] args) {
new TesteCxaText ();
}
}
Submeti-o ao NetBeans e resolvi este erro.
btCalcula.addActionListener (new ActionListener() {
**private int age;**
public void actionPerformed (ActionEvent e)
{
mas surgiu outro, que eu estava à espera é a formatação da data inserida na caixa de texto …
vamos continuando …
A variável “age” está fora do escopo, você declarou ela dentro de um bloco (o bloco do if) portanto você só pode usá-la lá.
faz assim:
long age = 0;
if (nascido.compareTo(nascido) <0); {
age = ChronoUnit.MONTHS.between(nascido,hj);
}
JOptionPane.showMessageDialog(null, age /12);
Código completo:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.time.*;
import java.time.temporal.ChronoUnit;
public class TesteCxaText extends JFrame {
public TesteCxaText (){
setLayout (null);
setSize (260,200);
setLocationRelativeTo(null);
setTitle("CALCULAR IDADE");
JLabel lblDisplay = new JLabel("Tem 55 anos e 08 meses");
lblDisplay.setHorizontalAlignment (JLabel.CENTER);
JButton btCalcula = new JButton("Calcular");
JButton btSair = new JButton ("Fechar");
JTextField txtNascido = new JTextField (" ");
getContentPane ().add (lblDisplay).setBounds(20,20,220,30);
getContentPane ().add (txtNascido).setBounds(20,60,220,30);
getContentPane ().add (btCalcula).setBounds(20,100,100,30);
getContentPane ().add (btSair).setBounds(140,100,100,30);
setVisible(true);
btSair.addActionListener (new ActionListener(){
public void actionPerformed (ActionEvent e)
{
System.exit (0);
}
});
btCalcula.addActionListener (new ActionListener() {
public void actionPerformed (ActionEvent e)
{
LocalDate hj = LocalDate.now();
LocalDate nascido = LocalDate.parse(txtNascido.getText());
long age = 0;
if (nascido.compareTo(nascido) <0); {
age = ChronoUnit.MONTHS.between(nascido,hj);
}
// lblDisplay.setText("Tem " + age /12 +" anos e " + age %12 + " meses");
JOptionPane.showMessageDialog(null, age /12);
}
});
}
public static void main(String[] args) {
new TesteCxaText ();
}
}
O que é que você tem que passar pra esse “LocalDate.parse(txtNascido.getText());” pra ele funcionar? Eu vi que precisa ser um formato específico de data que seu usuário terá que digitar, é isso? Que tipo de coisa ele precisa digitar exatamente?
Isto é para inserir noutro formulário ao inserir a data de nascimento do cliente, um label mostra a idade em anos e meses. A forma como a data é inserida, preferencialmente dd/MM/yyyy. Obrigado
Já resolvi, seu usuário precisará digitar uma data no formato “dd/MM/yyyy” como “20/07/1945”:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class TesteCxaText extends JFrame {
public TesteCxaText (){
setLayout (null);
setSize (260,200);
setLocationRelativeTo(null);
setTitle("CALCULAR IDADE");
JLabel lblDisplay = new JLabel("Tem 55 anos e 08 meses");
lblDisplay.setHorizontalAlignment (JLabel.CENTER);
JButton btCalcula = new JButton("Calcular");
JButton btSair = new JButton ("Fechar");
JTextField txtNascido = new JTextField (" ");
getContentPane ().add (lblDisplay).setBounds(20,20,220,30);
getContentPane ().add (txtNascido).setBounds(20,60,220,30);
getContentPane ().add (btCalcula).setBounds(20,100,100,30);
getContentPane ().add (btSair).setBounds(140,100,100,30);
setVisible(true);
btSair.addActionListener (new ActionListener(){
public void actionPerformed (ActionEvent e)
{
System.exit (0);
}
});
btCalcula.addActionListener (new ActionListener() {
public void actionPerformed (ActionEvent e)
{
LocalDate hj = LocalDate.now();
String dataDeNascimento = txtNascido.getText();
dataDeNascimento = dataDeNascimento.replaceAll(" ", "");
LocalDate nascido = LocalDate.parse(dataDeNascimento, DateTimeFormatter.ofPattern("dd/MM/yyyy"));
long age = 0;
if (nascido.compareTo(nascido) <0); {
age = ChronoUnit.MONTHS.between(nascido,hj);
}
// lblDisplay.setText("Tem " + age /12 +" anos e " + age %12 + " meses");
JOptionPane.showMessageDialog(null, age /12);
}
});
}
public static void main(String[] args) {
new TesteCxaText ();
}
}
Se é isso, marca a resposta como “aceita” e dá um click em curtir 
1 curtida
É isso aí … companheiro. Obrigado!!