Tratamento de Evento Duvida

Olá!

Estou com dificuldades no tratamento de eventos em Java.
Gostaria de adicionar os logs de eventos ao TextArea, com a data e hora em que ocorreram.
Comecei a implementar o evento de click do botão. Ele funciona, mas não sei como faço para jogar o log na área de texto.
Tem uma parte do código que deixei comentada, que seria utilizada para adicionar o log a todos os eventos, mas não está funcionando como esperado (não implementei todos os eventos ainda).

Os eventos que quero monitorar são:

Botao: MouseListener - Implementar todos os métodos desta interface.

Frame: MouseListener - Implementar todos os métodos desta interface.

Campo 1 e 2:FocusListener - Implementar todos os métodos desta interface.

Campo 1 e 2:KeyListener - Implementar o método keyTyped informando no log a tecla pressionada.

Seria para ser mais ou menos igual a da foto

eaf451337ba60bab83d764ec7a1eee864aa31a52

meu codigo

package eventolog.luciano;

import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class EventoLogLuciano extends JFrame {

private JLabel jCampo1, jCampo2, jLog;
private JTextField jtfCampo1, jtfCampo2;
private TextArea taLog;
private JButton jbBotao;

public EventoLogLuciano() {
    IniciarComponentes();
}

public void IniciarComponentes() {
    jbBotao = new JButton("Botão");
    jbBotao.setBounds(320, 270, 80, 30);
    jbBotao.addActionListener(new ActionListener() {

        
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("Botao Foi Clicado");
        }
    });

    this.setSize(450, 350);
    this.setLayout(null);

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("Tratamento de Eventos");

    jCampo1 = new JLabel("Campo 1");
    jCampo1.setBounds(10, 10, 50, 20);

    jtfCampo1 = new JTextField();
    jtfCampo1.setBounds(10, 30, 200, 20);

    jCampo2 = new JLabel("Campo 2");
    jCampo2.setBounds(225, 10, 50, 20);

    jtfCampo2 = new JTextField();
    jtfCampo2.setBounds(225, 30, 200, 20);

    jLog = new JLabel("Log de Eventos");
    jLog.setBounds(10, 80, 90, 20);

    taLog = new TextArea("", 10, 60, TextArea.SCROLLBARS_VERTICAL_ONLY);
    taLog.setBounds(10, 100, 400, 150);
    taLog.setEditable(true);

    this.add(jCampo1);
    this.add(jtfCampo1);
    this.add(jCampo2);
    this.add(jtfCampo2);
    this.add(jLog);
    this.add(taLog);
    this.add(jbBotao);

}

/**

// Não funciona corretamente
//Método que pode ser utilizado para adicionar ao log todos eventos

public void addEventos(String evento)

{

DateFormat dateFormat = new SimpleDateFormat(“HH:mm:ss”); //pega hora

Date date = new Date();

taLog.setText( dateFormat.format(date)+" - “+evento+”\n"+ taLog.getText());

taLog.setCaretPosition(0); //posiciona na primeira linha

}

public void keyTyped(KeyEvent e)

{

addEventos(“Tecla “”+e.getKeyChar()+”" digitada no Campo 1");//pega a tecla pressionada no campo 1

}

  • */

    public static void main(String[] args) {
    JFrame x = new EventoLogLuciano();
    x.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    x.setVisible(true);
    }

}

@Wicaro você pode fazer de um jeito que todo os componentes tenham particularmente seus eventos, tipo desse jeito aqui(vou fazer com eventos do mouse em apenas dois botões)

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JButton;

public class Exemplo extends JFrame{
private JButton botao1 = new JButton(“Botão 1”);
private JButton botao2 = new JButton(“Botão 2”);

public Exemplo(){
    super("Exemplo");
    
    this.setLayout(new GridLayout(1,2));
    this.setSize(300,300);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setResizable(false);
    this.setLocationRelativeTo(null);
    this.setVisible(true);
    
    this.add(botao1);
    this.add(botao2);
    
    botao1.addMouseListener(new MouseListener(){
        @Override
        public void mouseClicked(MouseEvent me) {
            System.out.println("Clicou no botão 1");
        }

        @Override
        public void mousePressed(MouseEvent me) {
            System.out.println("Pressionou o botao 1");
        }

        @Override
        public void mouseReleased(MouseEvent me) {
            System.out.println("Soltou o botao 1");
        }

        @Override
        public void mouseEntered(MouseEvent me) {
            System.out.println("passou com o mouse em cima do botao 1");
        }

        @Override
        public void mouseExited(MouseEvent me) {
            System.out.println("tirou o mouse de cima do botao 1");
        }
        
    });

    botao2.addMouseListener(new MouseListener(){
        @Override
        public void mouseClicked(MouseEvent me) {
            System.out.println("Clicou no botão 2");
        }

        @Override
        public void mousePressed(MouseEvent me) {
            System.out.println("Pressionou o botao 2");
        }

        @Override
        public void mouseReleased(MouseEvent me) {
            System.out.println("Soltou o botao 2");
        }

        @Override
        public void mouseEntered(MouseEvent me) {
            System.out.println("passou com o mouse em cima do botao 2");
        }

        @Override
        public void mouseExited(MouseEvent me) {
            System.out.println("tirou o mouse de cima do botao 2");
        }
    });


}



public static void main(String[] args){
    new Exemplo();
}

}

desse jeito você pode fazer seus eventos de mouse, keyboard e etc… Espero ter ajudado, até algum dia !