Resizable JWS Applet
 
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.