Download the JDK
Search the Tutorials
Hide the TOC
Trail: Deployment
Lesson: Applets
Section: Getting Started with Applets
Applets
Getting Started with Applets
Importing Classes and Packages for Applets
Defining an Applet Subclass
The Life Cycle of an Applet
Methods for Milestones
Methods for Drawing and Event Handling
Methods for Adding UI Components
What Applets Can and Can't Do
Taking Advantage of the Applet API
Finding and Loading Data Files
Displaying Short Status Strings
Displaying Documents in the Browser
Sending Messages to Other Applets
Playing Sounds
Defining and Using Applet Parameters
Deciding Which Parameters to Support
Writing the Code to Support Parameters
Giving Information about Parameters
Using the APPLET Tag
Practical Considerations When Writing Applets
Security Restrictions
Creating a User Interface
Creating a GUI
Displaying Diagnostics to the Standard Output and Error Streams
Getting System Properties
Threads in Applets
Threads in Applets: Examples
Working with a Server-Side Application
A Simple Network Client Applet
Using a Server to Work Around Security Restrictions
Finishing an Applet
Before You Ship that Applet
The Perfectly Finished Applet
Deploying Applets
General Deployment Considerations
Using the applet Tag
Using the object Tag
Using the embed Tag
Deploying Applets in a Mixed-Browser Environment
Solving Common Applet Problems
Questions and Exercises
Home Page > Deployment > Applets
Methods for Adding UI Components

> The `Simple` applet's display code (implemented in its `paint` method) is flawed: It doesn't support scrolling. Once the text it displays reaches the end of the display rectangle, you can't see any new text. Here's an example of the problem:

> This figure has been reduced to fit on the page.
> Click the image to view it at its natural size.

> The simplest cure for this problem is to use a pre-made user interface (UI) component that has the right behavior.

> > Note: This page glosses over many details. To really learn about using UI components, go to Creating a GUI with JFC/Swing.

### Pre-Made UI Components

> Swing supplies the following UI components (the class that implements each component is listed in parentheses):
> - Buttons (`javax.swing.JButton`)
> - Checkboxes (`javax.swing.JCheckBox`)
> - Single-line text fields (`javax.swing.JTextField`)
> - Larger text display and editing areas (`javax.swing.JTextArea`)
> - Labels (`javax.swing.JLabel`)
> - Lists (`javax.swing.JList`)
> - Pop-ups (`javax.swing.Popup`)
> - Scrollbars (`javax.swing.JScrollBar`)
> - Sliders (`javax.swing.JSlider`)
> - Drawing areas (`java.awt.Canvas`)
> - Menus (`javax.swing.JMenu`,`javax.swing.JMenuBar` `javax.swing.JMenuItem`, `javax.swing.JCheckBoxMenuItem`)
> - Containers (`javax.swing.JPanel`, `javax.swing.JWindow` and its subclasses)

### Methods for Using UI Components in Applets

> Because the `JApplet` class inherits from the AWT `Container` class, it's easy to add components to applets and to use layout managers to control the components' onscreen positions. Here are some of the `Container` methods an applet can use:
> `add`
>   Adds the specified `Component`.
> `remove`
>   Removes the specified `Component`.
> `setLayout`
>   Sets the layout manager.

### Adding a Non-Editable Text Field to the `Simple` Applet

> To make the `Simple` applet use a scrolling, non-editable text field, we can use the `JTextField` class. Here is the revised `ScrollingSimple class`.

> >     /*
> >      * Java(TM) SE 6 version.
> >      */

> >     import javax.swing.JApplet;
> >     import javax.swing.JTextField;
> >     import javax.swing.SwingUtilities;

> >     //Since we're adding a Swing component, we now need to
> >     //extend JApplet. We need to be careful to access
> >     //components only on the event-dispatching thread.
> >     public class ScrollingSimple extends JApplet {

> >         JTextField field;

> >         public void init() {
> >             //Execute a job on the event-dispatching thread:
> >             //creating this applet's GUI.
> >             try {
> >                 SwingUtilities.invokeAndWait(new Runnable() {
> >                     public void run() {
> >                         createGUI();
> >                     }
> >                 });
> >             } catch (Exception e) {
> >                 System.err.println("createGUI didn't successfully complete");
> >             }

> >             addItem(false, "initializing... ");
> >         }

> >         private void createGUI() {
> >             //Create the text field and make it uneditable.
> >             field = new JTextField();
> >             field.setEditable(false);

> >             //Set the layout manager so that the text field will be
> >             //as wide as possible.
> >             setLayout(new java.awt.GridLayout(1,0));

> >             //Add the text field to the applet.
> >             add(field);
> >         }

> >         public void start() {
> >             addItem(false, "starting... ");
> >         }

> >         public void stop() {
> >             addItem(false, "stopping... ");
> >         }

> >         public void destroy() {
> >             addItem(false, "preparing for unloading...");
> >             cleanUp();
> >         }

> >         private void cleanUp() {
> >             //Execute a job on the event-dispatching thread:
> >             //taking the text field out of this applet.
> >             try {
> >                 SwingUtilities.invokeAndWait(new Runnable() {
> >                     public void run() {
> >                         remove(field);
> >                     }
> >                 });
> >             } catch (Exception e) {
> >                 System.err.println("cleanUp didn't successfully complete");
> >             }
> >             field = null;
> >         }

> >         private void addItem(boolean alreadyInEDT, String newWord) {
> >             if (alreadyInEDT) {
> >                 addItem(newWord);
> >             } else {
> >                 final String word = newWord;
> >                 //Execute a job on the event-dispatching thread:
> >                 //invoking addItem(newWord).
> >                 try {
> >                     SwingUtilities.invokeAndWait(new Runnable() {
> >                         public void run() {
> >                             addItem(word);
> >                         }
> >                     });
> >                 } catch (Exception e) {
> >                     System.err.println("addItem didn't successfully complete");
> >                 }
> >             }
> >         }

> >         //Invoke this method ONLY from the event-dispatching thread.
> >         private void addItem(String newWord) {
> >             String t = field.getText();
> >             System.out.println(newWord);
> >             field.setText(t + newWord);
> >         }
> >     }

> The `createGUI` method creates an uneditable text field (a `JTextField` instance). It sets the applet's layout manager to one that makes the text field as wide as possible (you'll learn about layout managers in Laying Out Components within a Container) and then adds the text field to the applet.

> Below is the resulting applet.

> > Note: If you don't see the applet running above, you need to install Java Plug-in, which happens automatically when you install the Java(TM) SE JRE or JDK. This applet requires JDK 1.4 or later. You can find more information on the Java Plug-in home page.

Previous page: Methods for Drawing and Event Handling
Next page: What Applets Can and Can't Do