首页 / 软件开发 / JAVA / Merlin的魔力: Swing中的声音
Merlin的魔力: Swing中的声音2011-02-02 IBM John ZukowskiJ2SE 版本 1.4 中新增了一项有趣的 Swing 功能。Swing 控件现在可以提供听觉反馈来对特定事件作出响应,不过缺省情况下这项功能是禁用的。新增的这项功能有助于 Swing 控件更好地模仿系统本地操作系统的控件的行为。听觉基本知识Swing 使用一种可插式外观和感觉(Pluggable Look-and-Feel,PLAF)体系结构。开发者不必针对不同组件为颜色和字体之类的设置进行硬编码;取而代之的是,组件将从用户界面管理器(User Interface(UI)Manager)请求这些设置。作为开发者,您可以告诉 UI 管理器要让用户看到什么样的界面;您可以选择 Windows、Motif 或 Metal 样式等。UI 管理器接下来就可以实际告诉每个组件应该如何显示它自身。对于象按钮这样的组件来说,前景颜色是通过设置 Button.foreground 属性来控制的,如下所示:UIManager.put("Button.foreground", Color.red);在这里, Button.foreground 为用户界面属性名,而 Color.red 代表特定的设置。改变了设置之后,所有新的按钮的前景颜色都将是红色。(也有方法可以改变以前创建的按钮的前景颜色。)虽然不同的预置外观和感觉为这些设置提供了缺省值,您还是可以重设它们。在 J2SE 1.4 下,您可以用类似的方式来启用听觉反馈。您只要了解 UI 属性名和合适的设置就可以了。属性在这里被命名为 AuditoryCues.playList ,设置则为听觉提示名称的一个 String 数组。UI 管理器接下来将把这些名称映射到特定操作发生时将播放的声音文件。下面将给出系统提供的外观和感觉中所支持的声音列表。它们的名称本身就颇具解释性。CheckBoxMenuItem.commandSoundInternalFrame.closeSoundInternalFrame.maximizeSoundInternalFrame.minimizeSoundInternalFrame.restoreDownSoundInternalFrame.restoreUpSoundMenuItem.commandSoundOptionPane.errorSoundOptionPane.informationSoundOptionPane.questionSoundOptionPane.warningSoundPopupMenu.popupSoundRadioButtonMenuItem.commandSound提供给 AuditoryCues.playList 属性的 String 名称数组就是这样 ― 一个事件 名称的集合。UI 管理器负责将这些名称映射到特定于外观和感觉的声音。您可以从这些名称中手动地创建一个真正希望支持的事件名称的数组,不过这并不是必需的。值得庆幸的是,对于常用的组来说已经有两个系统定义过的设置可以使用,还有一个设置可以用于 Metal 外观和感觉。这些设置提供了一个查找键 AuditoryCues.allAuditoryCues ,它允许您从 UI 管理器查找适用于所有声音的数组。一旦您查找了这个数组,就可以用 AuditoryCues.playList 键将其存储在 UI 管理器中,如下所示:UIManager.put("AuditoryCues.playList",
UIManager.get("AuditoryCues.allAuditoryCues"));