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示例的源代码以进行进一步实验。