Como atualizar um JLabel automaticamente

Olá, estou com um problema.
Tem o campo JTextField ano e um JLabel Idade, gostaria de quando eu colocasse outra data a JLabel idade atualiza-se automaticamente sem a necessidade de um botão.
Caso não tenha como fazer dessa forma e vocês tiverem alguma sugestão eu vou agradecer por de mais.

Você pode usar o focusLost do seu jTextField, dessa forma quando o campo perder o foco você executa a mesma ação que faz hoje quando clica no botão.

1 curtida

Olá, amigo, beleza?

Então, creio que você possa resolver isso adicionando implementando algum Listener no seu campo de texto. Recomendo o Focus Listener: basicamente ele pode executar seu código quando alguma alteração ocorrer no foco do componente (como quando o usuário começar a digitar dentro do seu campo). Aqui um pequeno exemplo:

    JTextField txtAno = new JTextField();
    JLabel lblIdade = new JLabel("Idade: ");

    txtAno.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            super.focusGained(e);
            System.out.println("O usuário está digitando o ano...");
        }

        @Override
        public void focusLost(FocusEvent e) {
            super.focusLost(e);

            int calcIdade = (2020 - Integer.parseInt(txtAno.getText()));
            lblIdade.setText("Idade: " + calcIdade);

            System.out.println("O usuário acabou de digitar o ano");
        }
    });

Outra alternativa é implementar um Document Listener. Neste caso você consegue atualizar sua label até quando o usuário pressionar apenas uma tecla.

1 curtida

Consegui resolve com o que me ensinaram , vou deixar o código aqui para complementar.
Vcs São Show Cabeças. :heart::heart::heart:

public JLabel Idade(int x,int y,int lx,int ly){

    Calendar hoje = Calendar.getInstance();
    JLabel l = new JLabel();

    tf_nasciAno.addFocusListener(new FocusAdapter() {
        @Override
        public void focusGained(FocusEvent e) {
            super.focusGained(e);
        }

        @Override
        public void focusLost(FocusEvent e) {
            super.focusLost(e);
            
            int dia = Integer.parseInt(tf_nasciDia.getText());
            int mes = Integer.parseInt(tf_nasciMes.getText());
            int ano = Integer.parseInt(tf_nasciAno.getText());
            int anoHoje = hoje.get(Calendar.YEAR);
            int mesHoje = hoje.get(Calendar.WEEK_OF_YEAR);
            int diaHoje = hoje.get(Calendar.DAY_OF_YEAR);
            int idade = 0;

            if(mesHoje<mes){
                idade = anoHoje - ano - 1;
            } 
            if(mes==mesHoje){
                if(diaHoje>=dia){
                    idade = anoHoje - ano;
                } else{
                    idade = anoHoje - ano - 1;
                }
            } else {
                idade = anoHoje - ano;
            }

            l.setText("Idade: " + idade);
        }
    });

    l.setLayout(null);
    l.setSize(x,y);
    l.setLocation(lx,ly);
    l.setOpaque(true);
    l.setForeground(tema.getTextoTF2());
    l.setBackground(tema.getFundoTF());
    l.setBorder(
        BorderFactory.createMatteBorder(0,10,0,0,tema.getFundoTF())
    );
    l.setFont(new Font("monofonto", Font.BOLD, 16));
    l.setHorizontalAlignment(SwingConstants.LEFT);

    return l;
}