Setar Label

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 :smiley:

1 curtida

É isso aí … companheiro. Obrigado!!