如何编写内部框架侦听器
InternalFrameListener
与WindowListener
类似。类似于窗口侦听器,内部框架侦听器侦听首次显示,处置,图标化,去图标化,激活或停用的“窗口”时发生的事件。在使用内部框架侦听器之前,请熟悉如何编写窗口侦听器中的WindowListener
interface。
下图所示的应用程序演示了内部框架事件。该应用程序从事件生成器框架中侦听内部框架事件,并显示描述每个事件的消息。
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.
Method | Purpose |
---|---|
internalFrameOpened(InternalFrameEvent) | 在首次显示已收听的内部帧之后调用。 |
internalFrameClosing(InternalFrameEvent) | 响应于用户请求关闭已侦听的内部框架而调用。默认情况下,JInternalFrame 在用户关闭窗口时将其隐藏。您可以使用JInternalFrame setDefaultCloseOperation 方法来指定另一个选项,该选项必须为DISPOSE_ON_CLOSE 或DO_NOTHING_ON_CLOSE (都在WindowConstants 中定义,WindowConstants 是JInternalFrame 实现的interface)。或者通过在内部框架的侦听器中实现internalFrameClosing 方法,可以向内部框架关闭添加自定义行为(例如,弹出对话框或保存数据)。 |
internalFrameClosed(InternalFrameEvent) | 在侦听的内部帧处理完毕后调用。 |
internalFrameIconified(InternalFrameEvent) | |
internalFrameDeiconified(InternalFrameEvent) | 分别在图标化或取消图标化监听的内部框架之后调用。 |
internalFrameActivated(InternalFrameEvent) internalFrameDeactivated(InternalFrameEvent) | 分别在激活或禁用所侦听的内部框架之后调用。 |
每个内部框架事件方法都有一个参数:InternalFrameEvent对象。 InternalFrameEvent
类未定义一般有用的方法。要获取触发事件的内部框架,请使用getSource
方法,InternalFrameEvent
继承自java.util.EventObject
。
使用内部框架侦听器的示例
当前没有其他源文件包含内部框架侦听器。但是,内部帧侦听器与WindowListener
s 非常相似,并且一些 Swing 程序具有窗口侦听器:
Example | Where Described | Notes |
---|---|---|
InternalFrameEventDemo | This section | 报告在一个内部框架上发生的所有内部框架事件,以演示触发内部框架事件的情况。 |
DialogDemo | Literals 组件功能 | CustomDialog.java使用setDefaultCloseOperation 而不是窗口侦听器来确定用户关闭窗口时要采取的操作。 |
SliderDemo | 如何使用滑块 | 侦听窗口图标化和去图标化事件,以便在窗口不可见时可以停止动画。 |