A
Andrew Thompson
This example shows how to make an *applet* that is
launched using WebStart (JWS), resizable.
The trick lies in understanding that the root component
of an applet launched via JWS is a frame.
Here is example source and JNLP launch file to demonstrate
(note that you can 'try this at home' off the local
filesystem, just put the source & JNLP in the same
directory, and run these commands from that directory..)
javac *.java
jar -cvf resizeapplet.jar *.class
javaws -codebase file:. resizeapplet.jnlp
<launch file - resizeapplet.jnlp>
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0"
codebase="http://www.physci.org/"
href="resizeapplet.jnlp">
<information>
<title>Resize Applet</title>
<vendor>Andrew Thompson</vendor>
<description>
Shows how to make a webstarted applet resizable
</description>
</information>
<resources>
<j2se href="http://java.sun.com/products/autodl/j2se"
version="1.2+"/>
<jar href="resizeapplet.jar"/>
</resources>
<applet-desc
name='ResizeApplet'
main-class="ResizeJWSApplet"
width="500"
height="400">
</applet-desc>
</jnlp>
</launch file - resizeapplet.jnlp>
<sscce - ResizeJWSApplet.java>
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ResizeJWSApplet extends JApplet {
/** If this applet is launched via webstart, the
root component should be a frame. This stores a
reference to the root frame so the applet can
resize and set its attributes.*/
Frame root = null;
public void init() {
Component parent = getParent();
while(parent.getParent()!=null) {
parent = parent.getParent();
}
if (parent instanceof Frame) {
root = (Frame)parent;
}
setAppletResizeable(false);
Container c = getContentPane();
c.setLayout(new GridLayout(0,1));
// add some buttons to resize the applet
for (int ii=0; ii<3; ii++) {
final int value = 100+(100*((int)Math.pow(2,ii)));
JButton b = new JButton("size " + value);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
setAppletSize(new Dimension (value,value) );
}
});
c.add(b);
}
JButton resizable = new JButton("Toggle Resizable");
resizable.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (root!=null) {
setAppletResizeable(!root.isResizable());
}
}
});
c.add(resizable);
validate();
}
/** Sets whether the frame hosting this applet is
resizable by the end user. */
public void setAppletResizeable(boolean resizable) {
if (root!=null) {
root.setResizable(resizable);
}
}
/** Uses the reference to the root. */
public void setAppletSize(Dimension size) {
if (root!=null) {
root.setPreferredSize(size);
root.pack();
}
}
}
</sscce - ResizeJWSApplet.java>
( Note - X-posted tc c.l.j.programmer/gui, with follow-ups
to c.l.j.p. only. )
Andrew T.
launched using WebStart (JWS), resizable.
The trick lies in understanding that the root component
of an applet launched via JWS is a frame.
Here is example source and JNLP launch file to demonstrate
(note that you can 'try this at home' off the local
filesystem, just put the source & JNLP in the same
directory, and run these commands from that directory..)
javac *.java
jar -cvf resizeapplet.jar *.class
javaws -codebase file:. resizeapplet.jnlp
<launch file - resizeapplet.jnlp>
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0"
codebase="http://www.physci.org/"
href="resizeapplet.jnlp">
<information>
<title>Resize Applet</title>
<vendor>Andrew Thompson</vendor>
<description>
Shows how to make a webstarted applet resizable
</description>
</information>
<resources>
<j2se href="http://java.sun.com/products/autodl/j2se"
version="1.2+"/>
<jar href="resizeapplet.jar"/>
</resources>
<applet-desc
name='ResizeApplet'
main-class="ResizeJWSApplet"
width="500"
height="400">
</applet-desc>
</jnlp>
</launch file - resizeapplet.jnlp>
<sscce - ResizeJWSApplet.java>
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ResizeJWSApplet extends JApplet {
/** If this applet is launched via webstart, the
root component should be a frame. This stores a
reference to the root frame so the applet can
resize and set its attributes.*/
Frame root = null;
public void init() {
Component parent = getParent();
while(parent.getParent()!=null) {
parent = parent.getParent();
}
if (parent instanceof Frame) {
root = (Frame)parent;
}
setAppletResizeable(false);
Container c = getContentPane();
c.setLayout(new GridLayout(0,1));
// add some buttons to resize the applet
for (int ii=0; ii<3; ii++) {
final int value = 100+(100*((int)Math.pow(2,ii)));
JButton b = new JButton("size " + value);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
setAppletSize(new Dimension (value,value) );
}
});
c.add(b);
}
JButton resizable = new JButton("Toggle Resizable");
resizable.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (root!=null) {
setAppletResizeable(!root.isResizable());
}
}
});
c.add(resizable);
validate();
}
/** Sets whether the frame hosting this applet is
resizable by the end user. */
public void setAppletResizeable(boolean resizable) {
if (root!=null) {
root.setResizable(resizable);
}
}
/** Uses the reference to the root. */
public void setAppletSize(Dimension size) {
if (root!=null) {
root.setPreferredSize(size);
root.pack();
}
}
}
</sscce - ResizeJWSApplet.java>
( Note - X-posted tc c.l.j.programmer/gui, with follow-ups
to c.l.j.p. only. )
Andrew T.