Java教程是针对JDK 8编写的。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9和后续版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息,请参阅JDK发行说明。
通过指定draggable参数部署的Java applet可以被拖出浏览器,并动态转换为Java Web Start应用程序。可以通过按住Alt键和鼠标左键并拖动鼠标来拖动Java applet。拖动操作开始时,applet将从其父容器(Applet或JApplet)中移除,并放置在一个新的无边框顶级窗口(Frame或JFrame)中。拖动的applet旁边会显示一个小的浮动关闭按钮。单击浮动关闭按钮时,applet将放置回浏览器中。可以将可以拖出浏览器的Java applet称为可拖拽applet。
您可以通过以下方式自定义可拖拽applet的行为:
以下部分介绍了如何实现和自定义可拖拽applet。使用MenuChooserApplet类来演示可拖拽applet的开发和部署。在浏览器中打开以在新页面上查看菜单选择器applet。AppletPage.html
您可以在部署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>
您可以通过实现isAppletDragStart方法来更改用于拖动Applet的按键和鼠标按钮序列。在下面的代码片段中,按住鼠标左键并拖动鼠标可以拖动Applet:
public boolean isAppletDragStart(MouseEvent e) {
if(e.getID() == MouseEvent.MOUSE_DRAGGED) {
return true;
} else {
return false;
}
}
如果用户在将Applet拖出页面后关闭浏览器窗口或离开页面,则称Applet与浏览器断开连接。您可以在Applet与浏览器断开连接时为Applet创建一个桌面快捷方式。桌面快捷方式可用于在浏览器之外启动应用程序。要启用创建桌面快捷方式,请向Applet的Java网络启动协议(JNLP)文件添加offline-allowed和shortcut标签。
<information>
<!-- ... -->
<offline-allowed />
<shortcut online="false">
<desktop />
</shortcut>
</information>
您可以定义Applet的关闭方式。例如,您的Swing Applet可以有一个JButton来关闭Applet,而不是依赖默认的浮动关闭按钮。
Java插件软件会为Applet提供ActionListener类的一个实例。这个ActionListener类的实例,也称为关闭监听器,可用于修改Applet的默认关闭行为。
要定义Applet的关闭方式,请在您的Applet中实现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类负责控制applet的用户界面。 MenuItemChooser类定义了一个标有“关闭”的JButton。当用户点击此关闭按钮时,将执行以下代码:
private void close() {
// 调用从Java插件软件接收的closeListener的actionPerformed方法。
if (closeListener != null) {
closeListener.actionPerformed(null);
}
}
从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_frame和java_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示例的源代码以进行进一步实验。