A Java applet that is deployed by specifying the draggable
parameter can be dragged outside of the browser and dynamically transformed into a Java Web Start application. The Java applet can be dragged by pressing the Alt key and the left mouse button and dragging the mouse. When the drag operation begins, the applet is removed from its parent container (Applet
or JApplet
) and placed in a new undecorated top-level window (Frame
or JFrame
). A small floating Close button is displayed next to the dragged applet. When the floating Close button is clicked, the applet is placed back in the browser. Java applets that can be dragged out of the browser shall henceforth be referred to as draggable applets.
You can customize the behavior of a draggable applet in the following ways:
The following sections describe how to implement and customize a draggable applet. The
MenuChooserApplet
class is used to demonstrate the development and deployment of draggable applets. Open
in a browser to view the Menu Chooser applet on a new page.AppletPage.html
You can enable the capability to drag an applet by setting the draggable
parameter to true
when deploying the applet, as shown in the following code snippet:
<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>
You can change the keystroke and mouse button sequence that is used to drag an applet by implementing the isAppletDragStart
method. In the following code snippet, the applet can be dragged by pressing the left mouse button and dragging the mouse:
public boolean isAppletDragStart(MouseEvent e) { if(e.getID() == MouseEvent.MOUSE_DRAGGED) { return true; } else { return false; } }
If the user closes the browser window or navigates away from the page after dragging an applet outside of the page, the applet is said to be disconnected from the browser. You can create a desktop shortcut for the applet when the applet is disconnected from the browser. The desktop shortcut can be used to launch the application outside of the browser. To enable the creation of a desktop shortcut, add the offline-allowed
and shortcut
tags to the applet's Java Network Launch Protocol (JNLP) file.
<information> <!-- ... --> <offline-allowed /> <shortcut online="false"> <desktop /> </shortcut> </information>
You can define how your applet can be closed. For example, your Swing applet could have a JButton
to close the applet instead of relying on the default floating Close button.
The Java Plug-in software gives the applet an instance of the ActionListener
class. This instance of the ActionListener
class, also referred to as the close listener, can be used to modify the default close behavior of the applet.
To define how the applet should be closed, implement the setAppletCloseListener
and appletRestored
methods in your applet.
In the following code snippet, the
MenuChooserApplet
class receives the close listener and passes it on to the instance of the
MenuItemChooser
class:
MenuItemChooser display = null; // ... display = new MenuItemChooser(); // ... public void setAppletCloseListener(ActionListener cl) { display.setCloseListener(cl); } public void appletRestored() { display.setCloseListener(null); }
The MenuItemChooser
class is responsible for controlling the applet's user interface. The MenuItemChooser
class defines a JButton
labeled "Close." The following code is executed when the user clicks this Close button:
private void close() { // invoke actionPerformed of closeListener received // from the Java Plug-in software. if (closeListener != null) { closeListener.actionPerformed(null); } }
Beginning in the Java SE 7 release, when deploying an applet, you can specify that the window of dragged applet should be decorated with the default or customized window title.
To enable window decoration of a dragged applet, specify the java_decorated_frame
parameter with a value of "true"
. To enable a customized window title, specify the java_applet_title
parameter also. The value of this parameter should be the text of the window 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>
The java_decorated_frame
and java_applet_title
parameters can also be specified in the applet's JNLP file as shown in the following code snippet:
<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>
Download source code for the Draggable Applet example to experiment further.