I'm learning Java Swing and trying to understand how event handling works. In this example, the frame implements ActionListener, and the button is registered with button.addActionListener(this). When the button is pressed, actionPerformed(ActionEvent e) runs, and the code checks whether e.getSource() is the button. How does Java know that a button press happened and how does the event reach actionPerformed? Also, I'm still confused about anonymous classes—are they essentially unnamed classes that create objects with customized behavior?
4 Answers
An anonymous class is an unnamed class definition that is usually created and instantiated in one expression. For example, you can pass new ActionListener() { ... } directly to addActionListener instead of making MyFrame implement the interface. It isn’t a ‘super-instance’; it is simply an object whose class has no explicit name and provides the required method implementation.
There’s no magic involved. JButton detects a user interaction and creates an ActionEvent describing it. Because you called addActionListener(this), the current MyFrame object was registered as a listener. The button then calls that listener’s actionPerformed method and passes the event object as an argument. getSource() returns the object that generated the event, which is why you can compare it with button.
A useful way to think about addActionListener is that the button keeps a list of interested ActionListener objects. When it is activated, it loops through that list and calls actionPerformed on each listener. Your JFrame is in the list because it implements ActionListener and you passed this to the method. This is a common observer/listener pattern: one object notifies other objects by calling their methods.
The operating system receives the mouse or keyboard input first. Swing processes that input and determines which component should react. JButton converts the interaction into an action event and notifies its registered listeners. Your code handles that notification in actionPerformed. Java and JavaScript are separate languages, even though their names are similar.

So the listener is just another object that the button remembers and calls when the event occurs, rather than the event somehow searching for actionPerformed?