开发可拖动的 Servlets

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

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

  • 您可以更改用于将 Servlets 拖动到浏览器外部的按键和鼠标按钮 Sequences。

  • 您可以添加桌面快捷方式,该快捷方式可用于在浏览器外部启动应用程序。

  • 您可以定义将 Servlets 拖到浏览器之外后应如何关闭。

以下各节描述如何实现和自定义可拖动 Servlets。 MenuChooserApplet类用于演示可拖动 Servlets 的开发和部署。在浏览器中打开AppletPage.html,以在新页面上查看“菜单 selectors”Servlets。

Note:

如果看不到 Servlets 正在运行,则需要至少安装Java SE 开发套件(JDK)6 更新 10版本。

Note:

如果看不到示例正在运行,则可能需要在浏览器中启用 JavaScript 解释器,以便 Deployment Toolkit 脚本能够正常运行。

启用拖动 Servlets 的功能

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

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

更改用于拖动 Servlets 的按键和鼠标按钮 Sequences

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

public boolean isAppletDragStart(MouseEvent e) {
        if(e.getID() == MouseEvent.MOUSE_DRAGGED) {
            return true;
        } else {
            return false;
        }
    }

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

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

<information>
    <!-- ... -->
    <offline-allowed />
    <shortcut online="false">
        <desktop />
    </shortcut>
</information>

Note:

根据用户 Java 控制面板中“快捷方式创建”的设置,在创建快捷方式之前,可能会提示用户进行确认。

定义应如何关闭 Servlets

您可以定义如何关闭 Servlets。例如,您的 SwingServlets 可以有一个JButton来关闭 Servlets,而不是依靠默认的 Float“关闭”按钮。

Java 插件软件为 applet 提供了ActionListener类的实例。 ActionListener类的该实例,也称为* close listener *,可用于修改 Servlets 的默认关闭行为。

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

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

MenuItemChooser display = null;
// ...
display = new MenuItemChooser();
// ...
public void setAppletCloseListener(ActionListener cl) {
    display.setCloseListener(cl);
}

public void appletRestored() {
    display.setCloseListener(null);
}

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

private void close() {
    // invoke actionPerformed of closeListener received
    // from the Java Plug-in software.
    if (closeListener != null) {
        closeListener.actionPerformed(null);
    }
}

请求和自定义 Applet 装饰

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

要启用拖动 Servlets 的窗口修饰,请指定java_decorated_frame参数,其值为"true"。要启用自定义窗口标题,请同时指定java_applet_title参数。此参数的值应该是窗口标题的文本。

<script src="https://www.java.com/js/deployJava.js"></script>
<script>
    var attributes =
      { code:'SomeDraggableApplet', width:100, height:100 };
    var parameters =
      { jnlp_href: 'somedraggableapplet.jnlp', 
          java_decorated_frame: 'true',
          java_applet_title: 'A Custom Title'   
      };
    deployJava.runApplet(attributes, parameters, '1.7');
</script>

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

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

下载源代码用于“可拖动的 Servlets”示例,以进行进一步的实验。