如何编写内部框架侦听器

InternalFrameListenerWindowListener类似。类似于窗口侦听器,内部框架侦听器侦听首次显示,处置,图标化,去图标化,激活或停用的“窗口”时发生的事件。在使用内部框架侦听器之前,请熟悉如何编写窗口侦听器中的WindowListenerinterface。

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

一个窗口,演示由事件生成器框架触发的内部框架事件

Try this:

  • 单击启动按钮以使用Java™Web 开始(下载 JDK 7 或更高版本)运行 InternalFrameEventDemo。另外,要自己编译和运行示例,请查阅example index

  • 通过单击“显示内部框架”按钮调出事件生成器内部框架。
    您应该在显示区域中看到“内部框架已打开”消息。

  • try各种操作,看看会发生什么。例如,单击事件生成器,使其被激活。单击事件观察器,以便禁用事件生成器。单击事件生成器的装饰以图标化,最大化,最小化和关闭窗口。
    有关您将看到哪些事件的信息,请参见如何编写窗口侦听器

这是内部框架事件处理代码:

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

    public void internalFrameClosing(InternalFrameEvent e) {
        displayMessage("Internal frame closing", e);
    }

    public void internalFrameClosed(InternalFrameEvent e) {
        displayMessage("Internal frame closed", e);
        listenedToWindow = null;
    }

    public void internalFrameOpened(InternalFrameEvent e) {
        displayMessage("Internal frame opened", e);
    }

    public void internalFrameIconified(InternalFrameEvent e) {
        displayMessage("Internal frame iconified", e);
    }

    public void internalFrameDeiconified(InternalFrameEvent e) {
        displayMessage("Internal frame deiconified", e);
    }

    public void internalFrameActivated(InternalFrameEvent e) {
        displayMessage("Internal frame activated", e);
    }

    public void internalFrameDeactivated(InternalFrameEvent e) {
        displayMessage("Internal frame deactivated", 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("Event Generator",
                                                      true,  //resizable
                                                      true,  //closable
                                                      true,  //maximizable
                                                      true); //iconifiable
                //We want to reuse the internal frame, so we need to
                //make it hide (instead of being disposed of, which is
                //the default) when the user closes it.
                listenedToWindow.setDefaultCloseOperation(
                                        WindowConstants.HIDE_ON_CLOSE);

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

内部框架侦听器 API

InternalFrameListener interface

对应的适配器类为InternalFrameAdapter.

MethodPurpose
internalFrameOpened(InternalFrameEvent)在首次显示已收听的内部帧之后调用。
internalFrameClosing(InternalFrameEvent)响应于用户请求关闭已侦听的内部框架而调用。默认情况下,JInternalFrame在用户关闭窗口时将其隐藏。您可以使用JInternalFrame setDefaultCloseOperation方法来指定另一个选项,该选项必须为DISPOSE_ON_CLOSEDO_NOTHING_ON_CLOSE(都在WindowConstants中定义,WindowConstantsJInternalFrame实现的interface)。或者通过在内部框架的侦听器中实现internalFrameClosing方法,可以向内部框架关闭添加自定义行为(例如,弹出对话框或保存数据)。
internalFrameClosed(InternalFrameEvent)在侦听的内部帧处理完毕后调用。
internalFrameIconified(InternalFrameEvent)

internalFrameDeiconified(InternalFrameEvent)
分别在图标化或取消图标化监听的内部框架之后调用。
internalFrameActivated(InternalFrameEvent)
internalFrameDeactivated(InternalFrameEvent)
分别在激活或禁用所侦听的内部框架之后调用。

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

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

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

ExampleWhere DescribedNotes
InternalFrameEventDemoThis section报告在一个内部框架上发生的所有内部框架事件,以演示触发内部框架事件的情况。
DialogDemoLiterals 组件功能CustomDialog.java使用setDefaultCloseOperation而不是窗口侦听器来确定用户关闭窗口时要采取的操作。
SliderDemo如何使用滑块侦听窗口图标化和去图标化事件,以便在窗口不可见时可以停止动画。