Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
The Component listener is a listener interface for receiving component events. A component is an object having a graphical representation that can be displayed on the screen and that can interact with the user. Some of the examples of components are the buttons, checkboxes, and scrollbars of a typical graphical user interface.
The class that is interested in processing a component event either implements this interface and all the methods it contains, or extends the abstract ComponentAdapter class overriding only the methods of interest. The listener object created from that class is then registered with a component using the component's addComponentListener method. When the component's size, location, or visibility changes, the relevant method in the listener object is invoked, and the ComponentEvent is passed to it.
One or more component events are fired by a Component
object just after the component is hidden, made visible, moved, or resized.
The component-hidden and component-shown events occur only as the result of calls to a Component
's setVisible
method. For example, a window might be miniaturized into an icon (iconified) without a component-hidden event being fired.
To write a simple Component listener program, follow the steps mentioned below:
public class ComponentEventDemo ... implements ComponentListener
.... label.addComponentListener(this); ..... checkbox.addComponentListener(this); .... panel.addComponentListener(this); ... frame.addComponentListener(this);
public void componentHidden(ComponentEvent e) { displayMessage(e.getComponent().getClass().getName() + " --- Hidden"); } public void componentMoved(ComponentEvent e) { displayMessage(e.getComponent().getClass().getName() + " --- Moved"); } public void componentResized(ComponentEvent e) { displayMessage(e.getComponent().getClass().getName() + " --- Resized "); } public void componentShown(ComponentEvent e) { displayMessage(e.getComponent().getClass().getName() + " --- Shown"); }
The following example demonstrates component events. The window contains a panel that has a label and a check box. The check box controls whether the label is visible. A text area displays a message every time the window, panel, label, or check box fires a component event.
You can find the demo's code in
ComponentEventDemo.java
. Here is just the code related to handling component events:
public class ComponentEventDemo ... implements ComponentListener { static JFrame frame; JLabel label; ... public ComponentEventDemo() { ... JPanel panel = new JPanel(new BorderLayout()); label = new JLabel("This is a label", JLabel.CENTER); label.addComponentListener(this); panel.add(label, BorderLayout.CENTER); JCheckBox checkbox = new JCheckBox("Label visible", true); checkbox.addComponentListener(this); panel.add(checkbox, BorderLayout.PAGE_END); panel.addComponentListener(this); ... frame.addComponentListener(this); } ... public void componentHidden(ComponentEvent e) { displayMessage(e.getComponent().getClass().getName() + " --- Hidden"); } public void componentMoved(ComponentEvent e) { displayMessage(e.getComponent().getClass().getName() + " --- Moved"); } public void componentResized(ComponentEvent e) { displayMessage(e.getComponent().getClass().getName() + " --- Resized "); } public void componentShown(ComponentEvent e) { displayMessage(e.getComponent().getClass().getName() + " --- Shown"); } public static void main(String[] args) { ... //Create and set up the window. frame = new JFrame("ComponentEventDemo"); ... JComponent newContentPane = new ComponentEventDemo(); frame.setContentPane(newContentPane); ... } }
The ComponentListener Interface
All of these methods are also in the adapter class,
ComponentAdapter
.
方法 | 目的 |
---|---|
componentHidden(ComponentEvent) | Called after the listened-to component is hidden as the result of the setVisible method being called. |
componentMoved(ComponentEvent) | Called after the listened-to component moves, relative to its container. For example, if a window is moved, the window fires a component-moved event, but the components it contains do not. |
componentResized(ComponentEvent) | Called after the listened-to component's size (rectangular bounds) changes. |
componentShown(ComponentEvent) | Called after the listened-to component becomes visible as the result of the setVisible method being called. |
方法 | 目的 |
---|---|
Component getComponent() | Returns the component that fired the event. You can use this instead of the getSource method. |
例子 | Where Described | Notes |
---|---|---|
ComponentEventDemo |
This section | Reports all component events that occur on several components to demonstrate the circumstances under which component events are fired. |