如何编写内部帧监听器

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

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

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

A window which demonstrates internal frame events that are fired by Event Generator frame


Try this:

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

  2. 单击显示内部框按钮,打开事件生成器内部框架。 您应该在显示区域看到“打开内部框架”消息。

  3. 尝试各种操作,看看会发生什么。例如,单击“事件生成器”以使其激活。单击事件观察器,以便停用事件生成器。单击事件生成器的装饰以图标化,最大化,最小化和关闭窗口。 参见如何编写窗口监听器,了解您将看到的事件类型。

这是内部帧事件处理代码:

  1. public class InternalFrameEventDemo ...
  2. implements InternalFrameListener ... {
  3. ...
  4. public void internalFrameClosing(InternalFrameEvent e) {
  5. displayMessage("Internal frame closing", e);
  6. }
  7. public void internalFrameClosed(InternalFrameEvent e) {
  8. displayMessage("Internal frame closed", e);
  9. listenedToWindow = null;
  10. }
  11. public void internalFrameOpened(InternalFrameEvent e) {
  12. displayMessage("Internal frame opened", e);
  13. }
  14. public void internalFrameIconified(InternalFrameEvent e) {
  15. displayMessage("Internal frame iconified", e);
  16. }
  17. public void internalFrameDeiconified(InternalFrameEvent e) {
  18. displayMessage("Internal frame deiconified", e);
  19. }
  20. public void internalFrameActivated(InternalFrameEvent e) {
  21. displayMessage("Internal frame activated", e);
  22. }
  23. public void internalFrameDeactivated(InternalFrameEvent e) {
  24. displayMessage("Internal frame deactivated", e);
  25. }
  26. void displayMessage(String prefix, InternalFrameEvent e) {
  27. String s = prefix + ": " + e.getSource();
  28. display.append(s + newline);
  29. }
  30. public void actionPerformed(ActionEvent e) {
  31. if (SHOW.equals(e.getActionCommand())) {
  32. ...
  33. if (listenedToWindow == null) {
  34. listenedToWindow = new JInternalFrame("Event Generator",
  35. true, //resizable
  36. true, //closable
  37. true, //maximizable
  38. true); //iconifiable
  39. //We want to reuse the internal frame, so we need to
  40. //make it hide (instead of being disposed of, which is
  41. //the default) when the user closes it.
  42. listenedToWindow.setDefaultCloseOperation(
  43. WindowConstants.HIDE_ON_CLOSE);
  44. listenedToWindow.addInternalFrameListener(this);
  45. ...
  46. }
  47. }
  48. ...
  49. }
  50. }

相应的适配器类是 InternalFrameAdapter

方法 目的
internalFrameOpened(InternalFrameEvent) 在第一次显示收听的内部帧之后调用。
internalFrameClosing(InternalFrameEvent) 响应用户请求调用收听的内部帧。默认情况下,JInternalFrame会在用户关闭窗口时隐藏窗口。您可以使用JInternalFrame setDefaultCloseOperation方法指定另一个选项,该选项必须是DISPOSE_ON_CLOSEDO_NOTHING_ON_CLOSE(均在WindowConstants中定义,JInternalFrame实现的接口)。或者通过在内部框架的监听器中实现internalFrameClosing方法,可以将自定义行为(例如调出对话框或保存数据)添加到内部框架关闭。
internalFrameClosed(InternalFrameEvent) 在听完内部框架被处理之后调用。
internalFrameIconified(InternalFrameEvent)

internalFrameDeiconified(InternalFrameEvent) | 在收听的内部帧被分别图标化或去图标化之后调用。 | | internalFrameActivated(InternalFrameEvent) internalFrameDeactivated(InternalFrameEvent) | 在分别激活或停用收听的内部帧之后调用。 |

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

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

在哪里描述 笔记
InternalFrameEventDemo 这个部分 报告在一个内部帧上发生的所有内部帧事件,以演示触发内部帧事件的情况。
DialogDemo 文本组件功能 CustomDialog.java 使用setDefaultCloseOperation而不是窗口监听器来确定用户关闭窗口时要采取的操作。
SliderDemo 如何使用滑块 侦听窗口 iconify 和 deiconify 事件,以便在窗口不可见时停止动画。