开发可拖动的小程序

原文: https://docs.oracle.com/javase/tutorial/deployment/applet/draggableApplet.html

通过指定draggable参数部署的 Java 小程序可以拖动到浏览器之外并动态转换为 Java Web Start 应用程序。可以通过按 Alt 键和鼠标左键并拖动鼠标来拖动 Java 小程序。当拖动操作开始时,applet 将从其父容器(AppletJApplet)中移除,并放置在新的未修饰的顶级窗口(FrameJFrame)中。拖动的小程序旁边会显示一个小的浮动关闭按钮。单击浮动“关闭”按钮时,小程序将重新放回浏览器中。可以拖出浏览器的 Java 小程序以后称为可拖动小程序

您可以通过以下方式自定义可拖动小程序的行为:

  • 您可以更改用于将 applet 拖动到浏览器之外的按键和鼠标按键序列。
  • 您可以添加可用于在浏览器外部启动应用程序的桌面快捷方式。
  • 您可以定义在将 applet 拖出浏览器之后应如何关闭它。

以下部分描述了如何实现和自定义可拖动的 applet。 MenuChooserApplet 类用于演示可拖动小程序的开发和部署。在浏览器中打开 AppletPage.html,在新页面上查看菜单选择器小程序。


Note: If you don’t see the applet running, you need to install at least the Java SE Development Kit (JDK) 6 update 10 release.



Note: If you don’t see the example running, you might need to enable the JavaScript interpreter in your browser so that the Deployment Toolkit script can function properly.


启用能力拖动小程序

通过在部署 applet 时将draggable参数设置为true,可以启用拖动 applet 的功能,如以下代码段所示:

  1. <script src="https://www.java.com/js/deployJava.js"></script>
  2. <script>
  3. var attributes = { code:'MenuChooserApplet', width:900, height:300 };
  4. var parameters = { jnlp_href: 'draggableapplet.jnlp', draggable: 'true' };
  5. deployJava.runApplet(attributes, parameters, '1.6');
  6. </script>

更改用于拖动 Applet 的按键和鼠标按键序列

您可以通过实现isAppletDragStart方法更改用于拖动小程序的按键和鼠标按键序列。在下面的代码片段中,可以通过按下鼠标左键并拖动鼠标来拖动小程序:

  1. public boolean isAppletDragStart(MouseEvent e) {
  2. if(e.getID() == MouseEvent.MOUSE_DRAGGED) {
  3. return true;
  4. } else {
  5. return false;
  6. }
  7. }

当 Applet 与浏览器断开连接时,启用添加桌面快捷方式

如果用户在页面外拖动 applet 后关闭浏览器窗口或导航离开页面,则称 applet 与浏览器断开连接。当 applet 与浏览器断开连接时,您可以为 applet 创建桌面快捷方式。桌面快捷方式可用于在浏览器外部启动应用程序。要启用桌面快捷方式的创建,请将offline-allowedshortcut标记添加到小程序的 Java 网络启动协议(JNLP)文件中。

  1. <information>
  2. <!-- ... -->
  3. <offline-allowed />
  4. <shortcut online="false">
  5. <desktop />
  6. </shortcut>
  7. </information>

Note: Depending on the setting for Shortcut Creation in the user’s Java Control Panel, the user might be prompted for confirmation before the shortcut is created.


定义应如何关闭 Applet

您可以定义 applet 的关闭方式。例如,你的 Swing applet 可能有一个JButton来关闭 applet,而不是依赖于默认的浮动关闭按钮。

Java Plug-in 软件为 applet 提供了ActionListener类的实例。 ActionListener类的这个实例,也称为关闭监听器,可用于修改 applet 的默认关闭行为。

要定义应如何关闭 applet,请在 applet 中实现setAppletCloseListenerappletRestored方法。

在下面的代码片段中, MenuChooserApplet 类接收关闭监听器并将其传递给 MenuItemChooser 类的实例:

  1. MenuItemChooser display = null;
  2. // ...
  3. display = new MenuItemChooser();
  4. // ...
  5. public void setAppletCloseListener(ActionListener cl) {
  6. display.setCloseListener(cl);
  7. }
  8. public void appletRestored() {
  9. display.setCloseListener(null);
  10. }

MenuItemChooser类负责控制 applet 的用户界面。 MenuItemChooser类定义标记为“关闭”的JButton。当用户单击此“关闭”按钮时,将执行以下代码:

  1. private void close() {
  2. // invoke actionPerformed of closeListener received
  3. // from the Java Plug-in software.
  4. if (closeListener != null) {
  5. closeListener.actionPerformed(null);
  6. }
  7. }

请求和自定义 Applet 装饰

从 Java SE 7 发行版开始,在部署 applet 时,您可以指定拖动的 applet 窗口应使用默认或自定义窗口标题进行修饰。

要启用拖动小程序的窗口装饰,请使用值"true"指定java_decorated_frame参数。要启用自定义窗口标题,还请指定java_applet_title参数。此参数的值应为窗口标题的文本。

  1. <script src="https://www.java.com/js/deployJava.js"></script>
  2. <script>
  3. var attributes =
  4. { code:'SomeDraggableApplet', width:100, height:100 };
  5. var parameters =
  6. { jnlp_href: 'somedraggableapplet.jnlp',
  7. java_decorated_frame: 'true',
  8. java_applet_title: 'A Custom Title'
  9. };
  10. deployJava.runApplet(attributes, parameters, '1.7');
  11. </script>

java_decorated_framejava_applet_title参数也可以在 applet 的 JNLP 文件中指定,如以下代码段所示:

  1. <applet-desc main-class="SayHello" name="main test" height="150" width="300">
  2. <param name="java_decorated_frame" value="true" />
  3. <param name="java_applet_title" value="" />
  4. </applet-desc>

下载 Draggable Applet 示例的源代码进行进一步实验。