文档

Java™ 教程
隐藏目录
如何编写内部窗口监听器
指南:使用Swing创建GUI
课程:编写事件监听器
章节:为常见处理的事件实现监听器

如何编写内部框架监听器

InternalFrameListener类似于WindowListener。与窗口监听器一样,内部帧监听器监听“窗口”首次显示、销毁、图标化、取消图标化、激活或取消激活时发生的事件。在使用内部帧监听器之前,请熟悉如何编写窗口监听器中的WindowListener接口。

下图中显示的应用程序演示了内部帧事件。该应用程序从事件生成器框架监听内部帧事件,并显示描述每个事件的消息。

通过事件生成器框架触发的内部帧事件的窗口

请尝试以下操作: 
  1. 点击“启动”按钮,使用Java™ Web Start运行InternalFrameEventDemo(下载JDK 7或更高版本)。或者,要自己编译和运行示例,请参考示例索引启动InternalFrameEventDemo示例
  2. 通过点击显示内部帧按钮来显示事件生成器内部帧。
    您应该在显示区域中看到“内部帧已打开”的消息。
  3. 尝试各种操作以查看发生的情况。例如,单击事件生成器以使其激活。单击事件观察器以使事件生成器取消激活。单击事件生成器的装饰以将窗口图标化、最大化、最小化和关闭。
    有关您将看到的事件类型的信息,请参阅如何编写窗口监听器

下面是内部帧事件处理代码:

public class InternalFrameEventDemo ...
                     implements InternalFrameListener ... {
    ...

    // 内部窗体关闭时触发
    public void internalFrameClosing(InternalFrameEvent e) {
        displayMessage("内部窗体关闭", e);
    }

    // 内部窗体关闭后触发
    public void internalFrameClosed(InternalFrameEvent e) {
        displayMessage("内部窗体已关闭", e);
        listenedToWindow = null;
    }

    // 内部窗体打开时触发
    public void internalFrameOpened(InternalFrameEvent e) {
        displayMessage("内部窗体已打开", e);
    }

    // 内部窗体最小化时触发
    public void internalFrameIconified(InternalFrameEvent e) {
        displayMessage("内部窗体最小化", e);
    }

    // 内部窗体取消最小化时触发
    public void internalFrameDeiconified(InternalFrameEvent e) {
        displayMessage("内部窗体取消最小化", e);
    }

    // 内部窗体被激活时触发
    public void internalFrameActivated(InternalFrameEvent e) {
        displayMessage("内部窗体被激活", e);
    }

    // 内部窗体失去焦点时触发
    public void internalFrameDeactivated(InternalFrameEvent e) {
        displayMessage("内部窗体失去焦点", e);
    }

    // 显示消息
    void displayMessage(String prefix, InternalFrameEvent e) {
        String s = prefix + ": " + e.getSource(); 
        display.append(s + newline);
    }

    // 监听按钮点击事件
    public void actionPerformed(ActionEvent e) {
        if (SHOW.equals(e.getActionCommand())) {
            ...
            if (listenedToWindow == null) {
                listenedToWindow = new JInternalFrame("事件生成器",
                                                      true,  //可调整大小
                                                      true,  //可关闭
                                                      true,  //可最大化
                                                      true); //可图标化
                // 我们希望重用内部窗体,所以当用户关闭时,我们需要隐藏它
                listenedToWindow.setDefaultCloseOperation(
                                        WindowConstants.HIDE_ON_CLOSE);

                listenedToWindow.addInternalFrameListener(this);
                ...
            }
        } 
        ...
    }
}

内部窗体监听器API

InternalFrameListener接口

对应的适配器类为InternalFrameAdapter

方法 目的
internalFrameOpened(InternalFrameEvent) 在监听的内部窗口首次显示后调用。
internalFrameClosing(InternalFrameEvent) 响应用户请求关闭监听的内部窗口时调用。默认情况下,JInternalFrame在用户关闭窗口时隐藏窗口。您可以使用JInternalFramesetDefaultCloseOperation方法指定另一种选项,该选项必须是DISPOSE_ON_CLOSEDO_NOTHING_ON_CLOSE(都定义在WindowConstants中,JInternalFrame实现了该接口)。或者通过在内部窗口的监听器中实现internalFrameClosing方法,可以添加自定义行为(如弹出对话框或保存数据)以响应内部窗口的关闭。
internalFrameClosed(InternalFrameEvent) 在监听的内部窗口被释放后调用。
internalFrameIconified(InternalFrameEvent)
internalFrameDeiconified(InternalFrameEvent)
在监听的内部窗口被最小化或取消最小化后调用。
internalFrameActivated(InternalFrameEvent)
internalFrameDeactivated(InternalFrameEvent)
在监听的内部窗口被激活或取消激活后调用。

每个内部框架事件方法都有一个参数:一个InternalFrameEvent对象。 InternalFrameEvent类没有定义通用的方法。 要获取触发事件的内部框架,请使用getSource方法,该方法从java.util.EventObject继承。

使用内部框架监听器的示例

当前没有其他源文件包含内部框架监听器。 但是,内部框架监听器与WindowListener非常相似,并且有几个Swing程序具有窗口监听器:

示例 描述位置 注释
InternalFrameEventDemo 本节 报告在一个内部框架上发生的所有内部框架事件,以演示触发内部框架事件的情况。
DialogDemo 文本组件特性 CustomDialog.java使用setDefaultCloseOperation而不是窗口监听器来确定用户关闭窗口时要采取的操作。
SliderDemo 使用滑块 监听窗口图标化和取消图标化事件,以便在窗口不可见时停止动画。

上一页: 如何编写焦点监听器
下一页: 如何编写项目监听器