文档

Java™ 教程
隐藏目录
开发可拖动的Applets
路径: 部署
课程: Java Applets
章节: 进一步使用Applets

开发可拖动的Applets

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

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

以下部分介绍了如何实现和自定义可拖拽applet。使用MenuChooserApplet类来演示可拖拽applet的开发和部署。在浏览器中打开AppletPage.html以在新页面上查看菜单选择器applet。


注意:  如果您没有看到applet运行,请安装至少Java SE Development Kit (JDK) 6 update 10版本。

注意:  如果您没有看到示例运行,可能需要在浏览器中启用JavaScript解释器,以便Deployment Toolkit脚本可以正常工作。

启用拖拽applet的能力

您可以在部署applet时将draggable参数设置为true,以启用拖拽applet的能力,如下面的代码片段所示:

<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>

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

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

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

在Applet从浏览器断开连接时启用添加桌面快捷方式

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

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

注意:根据用户Java控制面板中的快捷方式创建设置,用户可能会在创建快捷方式之前被要求确认。

定义Applet的关闭方式

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

Java插件软件会为Applet提供ActionListener类的一个实例。这个ActionListener类的实例,也称为关闭监听器,可用于修改Applet的默认关闭行为。

要定义Applet的关闭方式,请在您的Applet中实现setAppletCloseListenerappletRestored方法。

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

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

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

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

private void close() {
    // 调用从Java插件软件接收的closeListener的actionPerformed方法。
    if (closeListener != null) {
        closeListener.actionPerformed(null);
    }
}

请求和自定义applet的装饰

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

要启用拖动的applet窗口装饰,请使用值为"true"java_decorated_frame参数。要启用自定义窗口标题,请还指定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: '自定义标题'   
      };
    deployJava.runApplet(attributes, parameters, '1.7');
</script>

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

<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>

下载可拖动Applet示例的源代码以进行进一步实验。


上一页:将诊断写入标准输出和错误流
下一页:与其他Applet通信