这些Java教程是针对JDK 8编写的。本页描述的示例和实践不利用后续版本中引入的改进,可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及其后续版本中更新的语言功能的概述。
请参阅JDK发行说明,了解所有JDK版本的新功能、增强功能和已删除或不推荐的选项的信息。
InternalFrameListener类似于WindowListener。与窗口监听器一样,内部帧监听器监听“窗口”首次显示、销毁、图标化、取消图标化、激活或取消激活时发生的事件。在使用内部帧监听器之前,请熟悉如何编写窗口监听器中的WindowListener接口。
下图中显示的应用程序演示了内部帧事件。该应用程序从事件生成器框架监听内部帧事件,并显示描述每个事件的消息。
下面是内部帧事件处理代码:
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);
...
}
}
...
}
}
对应的适配器类为InternalFrameAdapter。
| 方法 | 目的 |
|---|---|
| internalFrameOpened(InternalFrameEvent) | 在监听的内部窗口首次显示后调用。 |
| internalFrameClosing(InternalFrameEvent) | 响应用户请求关闭监听的内部窗口时调用。默认情况下,JInternalFrame在用户关闭窗口时隐藏窗口。您可以使用JInternalFrame的setDefaultCloseOperation方法指定另一种选项,该选项必须是DISPOSE_ON_CLOSE或DO_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 |
使用滑块 | 监听窗口图标化和取消图标化事件,以便在窗口不可见时停止动画。 |