如何编写容器监听器

原文: https://docs.oracle.com/javase/tutorial/uiswing/events/containerlistener.html

在将容器添加到容器或从容器中移除组件之后,容器事件由Container触发。这些事件仅用于通知 - 无需成功添加或删除组件的容器监听器。

以下示例演示容器事件。通过单击添加按钮删除按钮,您可以在窗口底部的面板中添加或删除按钮。每次向面板添加或从面板中删除按钮时,面板都会触发容器事件,并通知面板的容器监听器。监听器在窗口顶部的文本区域中显示描述性消息。

A screenshot which demonstrates container events


Try this:

  1. 单击“启动”按钮以使用 Java™Web Start下载 JDK 7 或更高版本)运行 ContainerEventDemo。或者,要自己编译并运行示例,请参考示例索引Launches the ContainerEventDemo example

  2. 单击标有添加按钮的按钮。 您会在窗口底部看到一个按钮。容器监听器通过在窗口顶部显示“JButton#1 已添加到 javax.swing.JPanel”来响应生成的组件添加事件。

  3. 单击标有的按钮删除按钮。 这将从面板中删除最近添加的按钮,从而使容器监听器接收组件删除的事件。

您可以在 ContainerEventDemo.java 中找到演示代码。这是 demo 的容器事件处理代码:

  1. public class ContainerEventDemo ... implements ContainerListener ... {
  2. ...//where initialization occurs:
  3. buttonPanel = new JPanel(new GridLayout(1,1));
  4. buttonPanel.addContainerListener(this);
  5. ...
  6. public void componentAdded(ContainerEvent e) {
  7. displayMessage(" added to ", e);
  8. }
  9. public void componentRemoved(ContainerEvent e) {
  10. displayMessage(" removed from ", e);
  11. }
  12. void displayMessage(String action, ContainerEvent e) {
  13. display.append(((JButton)e.getChild()).getText()
  14. + " was"
  15. + action
  16. + e.getContainer().getClass().getName()
  17. + newline);
  18. }
  19. ...
  20. }

相应的适配器类是 ContainerAdapter

方法 目的
componentAdded(ContainerEvent) 在将组件添加到侦听容器之后调用。
componentRemoved(ContainerEvent) 在从侦听容器中删除组件之后调用。
方法 目的
组件 getChild() 返回添加或删除触发此事件的组件。
Container getContainer() 返回触发此事件的容器。您可以使用它而不是getSource方法。

使用容器监听器的示例

下表列出了使用容器监听器的示例。

在哪里描述 笔记
ContainerEventDemo 这个部分 报告在单个面板上发生的所有容器事件,以演示触发容器事件的环境。