10 Applets
10 Applets
1
Motivations
When browsing the Web, you frequently see the graphical user
interface and animation developed using Java. These programs
are called Java applets. Suppose you want to develop a Java
applet for the Sudoku game. How do you write this program?
Sudoku
2
Objectives
To convert GUI applications to applets.
To embed applets in Web pages.
To run applets from Web browsers and from the appletviewer.
To write a Java program that can run as both an application and an
applet.
To override the init, start, stop, and destroy methods in the Applet
class.
To pass string values to applets from HTML.
To develop an applet for the TicTacToe game.
To develop an animation for a bouncing ball.
To locate resources (images and audio) using the URL class.
3
Developing Applets
import javax.swing.*; import javax.swing.*;
JApplet
public class DisplayLabel extends JFrame { public class DisplayLabel extends JFrame {
public DisplayLabel() { public DisplayLabel() {
add(new JLabel("Great!", JLabel.CENTER)); add(new JLabel("Great!", JLabel.CENTER));
} }
public static void main(String[] args) { public static void main(String[] args) {
JFrame frame = new DisplayLabel(); JFrame frame = new DisplayLabel();
frame.setTitle("DisplayLabel"); frame.setTitle("DisplayLabel");
frame.setSize(200, 100); frame.setSize(200, 100);
frame.setLocationRelativeTo(null); frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation( frame.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE); JFrame.EXIT_ON_CLOSE);
frame.setVisible(true); frame.setVisible(true);
} }
} }
4
The <applet> HTML Tag
<applet
code=classfilename.class
width=applet_viewing_width_in_pixels
height=applet_viewing_height_in_pixels
[archive=archivefile]
[codebase=applet_url]
[vspace=vertical_margin]
[hspace=horizontal_margin]
[align=applet_alignment]
[alt=alternative_text]
>
<param name=param_name1
value=param_value1>
</applet>
5
First Simple Applet
<html>
<head>
<title>Java Applet Demo</title>
</head>
<body>
<applet
code = "DisplayLabel.class"
width = 350
height = 200>
</applet>
</body>
</html>
8
Conversions Between
Applications and Applets
Conversions between applications and applets are
simple and easy.
You can always convert an applet into an
application.
You can convert an application to an
applet as long as security restrictions are
not violated.
9
Enabling Applets to Run as
Applications
import javax.swing.*;
public class DisplayLabel extends JApplet {
public DisplayLabel() {
add(new JLabel("Great!", JLabel.CENTER));
}
10
The Applet Class
When the applet is loaded, the Web browser creates
an instance of the applet by invoking the applet’s
no-arg constructor. The browser uses the init, start,
stop, and destroy methods to control the applet. By
default, these methods do nothing. To perform
specific functions, they need to be modified in the
user's applet so that the browser can call your code
properly.
11
Browser Calling Applet Methods
Browser creates Browser Browser Browser
the applet invokes init() invokes start() invokes start()
Loaded Created Initialized Started Started
12
The init() Method
Invoked when the applet is first loaded and again
if the applet is reloaded.
13
The start() Method
Invoked after the init() method is executed; also called
whenever the applet becomes active again after a period
of inactivity (for example, when the user returns to the
page containing the applet after surfing other Web pages).
14
The stop() Method
The opposite of the start() method, which is called when the user
moves back to the page containing the applet; the stop() method is
invoked when the user moves off the page.
15
The destroy() Method
Invoked when the browser exits normally to inform
the applet that it is no longer needed and that it
should release any resources it has allocated.
16
Writing Applets
Always extends the JApplet class, which is a
subclass of Applet for Swing components.
Override init(), start(), stop(), and
destroy() if necessary. By default, these
methods are empty.
Add your own methods and data if necessary.
Applets are always embedded in an
HTML page.
17
Passing Parameters to Applets
<applet
code = "DisplayMessage.class"
width = 200
height = 50>
<param name=MESSAGE value="Welcome
to Java">
<param name=X value=20>
<param name=Y value=20>
alt="You must have a Java-enabled
browser to view the applet"
</applet>
18
Example: Passing Parameters to
Java Applets
Objective: Display a
message at a
specified location.
The message and the
location (x, y) are
obtained from the
HTML source.
DisplayMessageApp
20
Case Study: TicTacToe
JPanel
-char token
Cell
+getToken
+setToken
-token: char+paintComponet Token used in the cell (default: ' ').
+mouseClicked
+getToken():char Returns the token in the cell.
+setToken(token: char): void Sets a new token in the cell.
#paintComponent(g: Graphics): void Paints the token in the cell.
+mouseClicked(e: MouseEvent): void Handles a mouse click on the cell.
21
Case Study: TicTacToe, cont.
Cell JApplet
9 token
-char -char token
1
+getToken +getToken
TicTacToe
+setToken +setToken
+paintComp -whoseTurn: char
+paintComp Indicates which player has the turn, initially 'X'.
onet onet
+mouseClic -cell: Cell[][]
+mouseClic A 3 by 3, two dimensional array for cells.
ked -jlblStatus: JLabel
ked A label to display game status.
Objective: Write an
applet that displays a
ball bouncing in a panel.
Use two buttons to
suspend and resume the
movement and use a
scroll bar to control the
bouncing speed.
23
Case Study: Bouncing Ball, cont.
+Ball()
+suspend(): void
+resume(): void
+setDelay(delay: int): void
24
Exercise for extending to multiple balls
JPanel JPanel JApplet
-char token -char -char token
1 1 token 1 1
BallPanel
+getToken BallControl +getToken
BounceBallApp
+setToken +getToken +setToken
+paintCom
-list: ArrayList // list of balls +setToken
-ballPanel: BallPanel +paintComp
+BounceBallApp()
-radius: intponet +paintCo
-jsbDelay: JScrollBar onet String[]): void
+main(args:
-delay: int +mouseCli mponet
-jbtResume: JButton +mouseClic
cked
-timer: Timer +mouseCli
-jbtSuspend: JButton ked
-jbtAdd: JButton
cked
+BallPanel() -jbtSubtract: JButton
+suspend(): void
+resume(): void +BallControl()
+add(): void
+subtract(): void
+setDelay(delay: int): void
+paintComponent(g: Graphics): SingleBall
void
+x: int
+y: int
+dx: int
+dy: int
+color: Color
+SingleBall()
25
Locating Resource from Applets
Due to security restrictions, applets cannot access
local files. How can an applet load resource files
for image and audio?
26
Creating ImageIcon Using Absolute File Names
Example:
ImageIcon imageIcon = new
ImageIcon("c:\\book\\image\\us.gif");
jlbl.setIcon(imageIcon);
This approach suffers a problem. The file location is
fixed since it uses the absolute file path on Window.
Thus, the program cannot run on other platforms and
cannot run as applet.
27
Creating ImageIcon Using Relative File Names
Assume that image/us.gif is under the class directory,
you can circumvent this problem by using a relative
path as follows:
ImageIcon imageIcon = new ImageIcon("image/us.gif");
jlbl.setIcon(imageIcon);
This works fine with Java applications on all platforms, but
does not work with Java applets because applets cannot load
local files. To make it to work with both applications and
applets, you need to locate the file using the URL class.
28
Locating Resource Using the URL Class
The java.net.URL class can be used to identify files (image, audio,
text, etc.) on the Internet. In general, a URL (Uniform Resource
Locator) is a pointer to a “resource” on the World Wide Web on a
local machine or a remote host. A resource can be something as
simple as a file or a directory.
Directory
.
.
An applet or .
application Class metaObject = this.getClass();
URL url = metaObject.getResource(resourceFilename);
.
.
A resource file .
29
Creating a URL from a Class Reference
A URL for a file can also be accessed from a class in a
way that is independent of the location of the file, as
long as the resource file is located in the class directory.
C:\book
.
.
An applet or .
application Class metaObject = this.getClass();
URL url = metaObject.getResource("image/us.gif");
.
.
image .
us.gif
30
Displaying Image
Write a program that displays an image from
/image/us.gif in the class directory on a panel.
DisplayImageWithURL Run
31
Companion
Website Packaging and Deploying
Java Projects
What is JAR?
Java archive file can be used to group all the project files in a
compressed file for deployment.
The Java archive file format (JAR) is based on the popular ZIP file
format.
33
Companion
Website
Viewing the Contents of a JAR File
You can view the contents of a .jar file using
WinZip.
34
Companion
Website
Manifest File
A manifest file was created with the path name meta-inf\. The
manifest is a special file that contains information about the files
packaged in a JAR file. For instance, the manifest file in
TicTacToe.jar contains the following information:
Manifest-Version: 1.0
Name: TicTacToe.class
Java-Bean: True
Name: TioTacToe$Cell.class
Java-Bean: True
You can modify the information contained in the manifest file to
enable the JAR file to be used for a variety of purposes. For instance,
you can add information to specify a main class to run an application
using the .jar file.
35
Companion
Website Running Archived Projects Standalone
The manifest file must have an entry to contain the main class. For
example, to run TicTacToe, you need to insert the following two lines
in the manifest file:
Main-Class: TicTacToe
Sealed: true
Run the .jar file using the java command from the directory that
contains TicTacToe.jar,
java -jar TicTacToe.jar