开发可拖动的 Servlets
通过指定draggable
参数部署的 Java applet 可以拖到浏览器外部,并动态转换为 Java Web Start 应用程序。可以通过按 Alt 键和鼠标左键并拖动鼠标来拖动 JavaServlets。当拖动操作开始时,Servlets 将从其父容器(Applet
或JApplet
)中删除,并放置在新的未修饰的顶级窗口中(Frame
或JFrame
)。拖动的 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-allowed
和shortcut
标记添加到 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 中实现setAppletCloseListener
和appletRestored
方法。
在以下代码段中,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_frame
和java_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”示例,以进行进一步的实验。