Resizable JWS Applet

  • Thread starter Andrew Thompson
  • Start date
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.
 
T

Thomas Hawtin

Andrew said:
This example shows how to make an *applet* that is
launched using WebStart (JWS), resizable.

You could just make it into an application...

(Or do you want the sound clip functionality?)

Tom Hawtin
 
A

Andrew Thompson

Thomas said:
You could just make it into an application...

(Or do you want the sound clip functionality?)

LOL! No.. But you did raise a good question in "what's the point?".

Well, it just bugged me, is all.

After spending a great deal of effort designing resizable GUI's,
then a lot more time figuring how to make an applet that resized
to 'the available content area'* of a web page, it was very
disappointing to see that JWS'd applets ended up in an
unresizable frame (applet viewer).

As such - I generally wrote off using JWS to launch applets,
and was recommending the path you suggest 'for JWS
launch - convert to an application'.

Now, this at least gives the devloper the option to
retain the applet, and still have it resizable.

Mostly, I put it here to remind myself that JWS applets
*can* be resized, which is important (putting it here),
because I may have forgotten by next week. ;-)

Now that I put it down like that, it hardly seems as
impressive an achievement.. oh well. :-/

* <http://www.physci.org/test/resize/>

Andrew T.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,008
Latest member
obedient dusk

Latest Threads

Top