processEvent не вызывается после отправки события

Если я отправлю событие (действие) в a JButton, processEventметод кнопки не будет вызван.

В примере ниже я думал, что следующие шаги будут выполнены

  1. b1 отправляет событие в b2( dispatchEventвызывается)
  2. b2 процессы вызывается событие(processEvent)
  3. b2 выполняет прослушиватели действий

Но шаги 2 и 3 выполняться не будут. Кто-нибудь может объяснить почему?

import java.awt.AWTEvent;
import java.awt.event.*;
import javax.swing.*;

public class JavaApplication {

  public static void main(String[] args) {
    final JFrame frame = new JFrame();
    final JPanel panel = new JPanel();
    final JButton b2 = new JButton("b2") {
      @Override
      public void processEvent(AWTEvent evt) {
        System.out.println("action event will be processed" + evt.toString());
        super.processEvent(evt);
      }
    };

    b2.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        System.out.println("b2 clicked");
      }
    });

    final JButton b1 = new JButton("b1");

    b1.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        System.out.println("b1 clicked");
        final ActionEvent e2 = new ActionEvent(e.getSource(), e.getID(), "Redispatch-Event");
        b2.dispatchEvent(e2);

      }
    });

    panel.add(b1);
    panel.add(b2);
    frame.add(panel);
    frame.pack();
    frame.setVisible(true);
  }
}

1 ответ