- •CONTENTS
- •1.1 Introduction
- •1.2 What Is a Computer?
- •1.3 Programs
- •1.4 Operating Systems
- •1.5 Java, World Wide Web, and Beyond
- •1.6 The Java Language Specification, API, JDK, and IDE
- •1.7 A Simple Java Program
- •1.8 Creating, Compiling, and Executing a Java Program
- •1.9 (GUI) Displaying Text in a Message Dialog Box
- •2.1 Introduction
- •2.2 Writing Simple Programs
- •2.3 Reading Input from the Console
- •2.4 Identifiers
- •2.5 Variables
- •2.7 Named Constants
- •2.8 Numeric Data Types and Operations
- •2.9 Problem: Displaying the Current Time
- •2.10 Shorthand Operators
- •2.11 Numeric Type Conversions
- •2.12 Problem: Computing Loan Payments
- •2.13 Character Data Type and Operations
- •2.14 Problem: Counting Monetary Units
- •2.15 The String Type
- •2.16 Programming Style and Documentation
- •2.17 Programming Errors
- •2.18 (GUI) Getting Input from Input Dialogs
- •3.1 Introduction
- •3.2 boolean Data Type
- •3.3 Problem: A Simple Math Learning Tool
- •3.4 if Statements
- •3.5 Problem: Guessing Birthdays
- •3.6 Two-Way if Statements
- •3.7 Nested if Statements
- •3.8 Common Errors in Selection Statements
- •3.9 Problem: An Improved Math Learning Tool
- •3.10 Problem: Computing Body Mass Index
- •3.11 Problem: Computing Taxes
- •3.12 Logical Operators
- •3.13 Problem: Determining Leap Year
- •3.14 Problem: Lottery
- •3.15 switch Statements
- •3.16 Conditional Expressions
- •3.17 Formatting Console Output
- •3.18 Operator Precedence and Associativity
- •3.19 (GUI) Confirmation Dialogs
- •4.1 Introduction
- •4.2 The while Loop
- •4.3 The do-while Loop
- •4.4 The for Loop
- •4.5 Which Loop to Use?
- •4.6 Nested Loops
- •4.7 Minimizing Numeric Errors
- •4.8 Case Studies
- •4.9 Keywords break and continue
- •4.10 (GUI) Controlling a Loop with a Confirmation Dialog
- •5.1 Introduction
- •5.2 Defining a Method
- •5.3 Calling a Method
- •5.4 void Method Example
- •5.5 Passing Parameters by Values
- •5.6 Modularizing Code
- •5.7 Problem: Converting Decimals to Hexadecimals
- •5.8 Overloading Methods
- •5.9 The Scope of Variables
- •5.10 The Math Class
- •5.11 Case Study: Generating Random Characters
- •5.12 Method Abstraction and Stepwise Refinement
- •6.1 Introduction
- •6.2 Array Basics
- •6.3 Problem: Lotto Numbers
- •6.4 Problem: Deck of Cards
- •6.5 Copying Arrays
- •6.6 Passing Arrays to Methods
- •6.7 Returning an Array from a Method
- •6.8 Variable-Length Argument Lists
- •6.9 Searching Arrays
- •6.10 Sorting Arrays
- •6.11 The Arrays Class
- •7.1 Introduction
- •7.2 Two-Dimensional Array Basics
- •7.3 Processing Two-Dimensional Arrays
- •7.4 Passing Two-Dimensional Arrays to Methods
- •7.5 Problem: Grading a Multiple-Choice Test
- •7.6 Problem: Finding a Closest Pair
- •7.7 Problem: Sudoku
- •7.8 Multidimensional Arrays
- •8.1 Introduction
- •8.2 Defining Classes for Objects
- •8.3 Example: Defining Classes and Creating Objects
- •8.4 Constructing Objects Using Constructors
- •8.5 Accessing Objects via Reference Variables
- •8.6 Using Classes from the Java Library
- •8.7 Static Variables, Constants, and Methods
- •8.8 Visibility Modifiers
- •8.9 Data Field Encapsulation
- •8.10 Passing Objects to Methods
- •8.11 Array of Objects
- •9.1 Introduction
- •9.2 The String Class
- •9.3 The Character Class
- •9.4 The StringBuilder/StringBuffer Class
- •9.5 Command-Line Arguments
- •9.6 The File Class
- •9.7 File Input and Output
- •9.8 (GUI) File Dialogs
- •10.1 Introduction
- •10.2 Immutable Objects and Classes
- •10.3 The Scope of Variables
- •10.4 The this Reference
- •10.5 Class Abstraction and Encapsulation
- •10.6 Object-Oriented Thinking
- •10.7 Object Composition
- •10.8 Designing the Course Class
- •10.9 Designing a Class for Stacks
- •10.10 Designing the GuessDate Class
- •10.11 Class Design Guidelines
- •11.1 Introduction
- •11.2 Superclasses and Subclasses
- •11.3 Using the super Keyword
- •11.4 Overriding Methods
- •11.5 Overriding vs. Overloading
- •11.6 The Object Class and Its toString() Method
- •11.7 Polymorphism
- •11.8 Dynamic Binding
- •11.9 Casting Objects and the instanceof Operator
- •11.11 The ArrayList Class
- •11.12 A Custom Stack Class
- •11.13 The protected Data and Methods
- •11.14 Preventing Extending and Overriding
- •12.1 Introduction
- •12.2 Swing vs. AWT
- •12.3 The Java GUI API
- •12.4 Frames
- •12.5 Layout Managers
- •12.6 Using Panels as Subcontainers
- •12.7 The Color Class
- •12.8 The Font Class
- •12.9 Common Features of Swing GUI Components
- •12.10 Image Icons
- •13.1 Introduction
- •13.2 Exception-Handling Overview
- •13.3 Exception-Handling Advantages
- •13.4 Exception Types
- •13.5 More on Exception Handling
- •13.6 The finally Clause
- •13.7 When to Use Exceptions
- •13.8 Rethrowing Exceptions
- •13.9 Chained Exceptions
- •13.10 Creating Custom Exception Classes
- •14.1 Introduction
- •14.2 Abstract Classes
- •14.3 Example: Calendar and GregorianCalendar
- •14.4 Interfaces
- •14.5 Example: The Comparable Interface
- •14.6 Example: The ActionListener Interface
- •14.7 Example: The Cloneable Interface
- •14.8 Interfaces vs. Abstract Classes
- •14.9 Processing Primitive Data Type Values as Objects
- •14.10 Sorting an Array of Objects
- •14.11 Automatic Conversion between Primitive Types and Wrapper Class Types
- •14.12 The BigInteger and BigDecimal Classes
- •14.13 Case Study: The Rational Class
- •15.1 Introduction
- •15.2 Graphical Coordinate Systems
- •15.3 The Graphics Class
- •15.4 Drawing Strings, Lines, Rectangles, and Ovals
- •15.5 Case Study: The FigurePanel Class
- •15.6 Drawing Arcs
- •15.7 Drawing Polygons and Polylines
- •15.8 Centering a String Using the FontMetrics Class
- •15.9 Case Study: The MessagePanel Class
- •15.10 Case Study: The StillClock Class
- •15.11 Displaying Images
- •15.12 Case Study: The ImageViewer Class
- •16.1 Introduction
- •16.2 Event and Event Source
- •16.3 Listeners, Registrations, and Handling Events
- •16.4 Inner Classes
- •16.5 Anonymous Class Listeners
- •16.6 Alternative Ways of Defining Listener Classes
- •16.7 Problem: Loan Calculator
- •16.8 Window Events
- •16.9 Listener Interface Adapters
- •16.10 Mouse Events
- •16.11 Key Events
- •16.12 Animation Using the Timer Class
- •17.1 Introduction
- •17.2 Buttons
- •17.3 Check Boxes
- •17.4 Radio Buttons
- •17.5 Labels
- •17.6 Text Fields
- •17.7 Text Areas
- •17.8 Combo Boxes
- •17.9 Lists
- •17.10 Scroll Bars
- •17.11 Sliders
- •17.12 Creating Multiple Windows
- •18.1 Introduction
- •18.2 Developing Applets
- •18.3 The HTML File and the <applet> Tag
- •18.4 Applet Security Restrictions
- •18.5 Enabling Applets to Run as Applications
- •18.6 Applet Life-Cycle Methods
- •18.7 Passing Strings to Applets
- •18.8 Case Study: Bouncing Ball
- •18.9 Case Study: TicTacToe
- •18.10 Locating Resources Using the URL Class
- •18.11 Playing Audio in Any Java Program
- •18.12 Case Study: Multimedia Animations
- •19.1 Introduction
- •19.2 How is I/O Handled in Java?
- •19.3 Text I/O vs. Binary I/O
- •19.4 Binary I/O Classes
- •19.5 Problem: Copying Files
- •19.6 Object I/O
- •19.7 Random-Access Files
- •20.1 Introduction
- •20.2 Problem: Computing Factorials
- •20.3 Problem: Computing Fibonacci Numbers
- •20.4 Problem Solving Using Recursion
- •20.5 Recursive Helper Methods
- •20.6 Problem: Finding the Directory Size
- •20.7 Problem: Towers of Hanoi
- •20.8 Problem: Fractals
- •20.9 Problem: Eight Queens
- •20.10 Recursion vs. Iteration
- •20.11 Tail Recursion
- •APPENDIXES
- •INDEX
614Chapter 18 Applets and Multimedia
18.1Introduction
When browsing the Web, often the graphical user interface and animation you see are developed by the use of Java. The programs used are called Java applets. Suppose you want to develop a Java applet for the Sudoku game, as shown in Figure 18.1. How do you write this program?
FIGURE 18.1 The Sudoku game is displayed in a Web browser.
In this chapter, you will learn how to write Java applets, explore the relationship between applets and the Web browser, and discover the similarities and differences between applications and applets. You will also learn how to create multimedia Java applications and applets with images and audio.
Video Note
First applet
18.2 Developing Applets
So far, you have used only Java applications. Everything you have learned about writing applications, however, applies also to writing applets. Applications and applets share many common programming features, although they differ slightly in some aspects. For example, every application must have a main method, which is invoked by the Java interpreter. Java applets, on the other hand, do not need a main method. They run in the Web browser environment. Because applets are invoked from a Web page, Java provides special features that enable applets to run from a Web browser.
The Applet class provides the essential framework that enables applets to be run from a Web browser. While every Java application has a main method that is executed when the application starts, applets do not have a main method. Instead they depend on the browser to run. Every applet is a subclass of java.applet.Applet. The Applet class is an AWT class
18.3 The HTML File and the <applet> Tag 615
and is not designed to work with Swing components. To use Swing components in Java applets, you need to create a Java applet that extends javax.swing.JApplet, which is a subclass of java.applet.Applet.
Every Java GUI program you have developed can be converted into an applet by replacing JFrame with JApplet and deleting the main method. Figure 18.2(a) shows a Java GUI application program, which can be converted into a Java applet as shown in Figure 18.2(b).
import javax.swing.*;
public class DisplayLabel extends JFrame { public DisplayLabel() {
add(new JLabel("Great!", JLabel.CENTER));
}
public static void main(String[] args) { JFrame frame = new DisplayLabel(); frame.setTitle("DisplayLabel"); frame.setSize(200, 100); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE); frame.setVisible(true);
}
}
(a) GUI application
import javax.swing.*;
JApplet public class DisplayLabel extends JFrame {
public DisplayLabel() {
add(new JLabel("Great!", JLabel.CENTER));
}
public static void main(String[] args) { JFrame frame = new DisplayLabel(); frame.setTitle("DisplayLabel"); frame.setSize(200, 100); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE); frame.setVisible(true);
}
}
(b) Applet
FIGURE 18.2 You can convert a GUI application into an applet.
Listing 18.1 gives the complete code for the applet.
LISTING 18.1 DisplayLabel.java
1 |
import javax.swing.*; |
|
||
2 |
|
|
|
|
3 |
public class DisplayLabel |
extends JApplet |
{ |
extend JApplet |
4public DisplayLabel() {
5add(new JLabel("Great!", JLabel.CENTER));
6 |
} |
7 |
} |
Like JFrame, JApplet is a container that can contain other GUI components (see the GUI class diagrams in Figure 14.1).
18.3 The HTML File and the <applet> Tag
To run an applet from a browser, you need to create an HTML file with the <applet> tag. HTML is a markup language that presents static documents on the Web. It uses tags to instruct the Web browser how to render a Web page and contains a tag called <applet> that
incorporates applets into a Web page.
The HTML file in Listing 18.2 invokes the DisplayLabel.class:
LISTING 18.2 DisplayLabel.html
<html>
<head>
<title>Java Applet Demo</title> </head>
<body>
616 Chapter 18 |
Applets and Multimedia |
||||
|
<applet |
||||
applet class |
|
code = "DisplayLabel.class" |
|
||
|
width = 250 |
||||
|
height = 50 |
> |
|
|
|
|
</applet> |
||||
|
</body> |
||||
|
</html> |
||||
|
A tag is an instruction to the Web browser. The browser interprets the tag and decides how to |
||||
|
display or otherwise treat the subsequent contents of the HTML document. Tags are enclosed |
||||
|
inside brackets. The first word in a tag, called the tag name, describes tag functions. A tag can |
||||
|
have additional attributes, sometimes with values after an equals sign, which further define |
||||
|
the tag’s action. For example, in the preceding HTML file, <applet> is the tag name, and |
||||
|
code, width, and height are attributes. The width and height attributes specify the rec- |
||||
|
tangular viewing area of the applet. |
||||
|
Most tags have a start tag and a corresponding end tag. The tag has a specific effect on the |
||||
|
region between the start tag and the end tag. For example, <applet...>...</applet> |
||||
|
tells the browser to display an applet. An end tag is always the start tag’s name preceded by a |
||||
|
slash. |
||||
HTML tag |
An HTML document begins with the <html> tag, which declares that the document is |
||||
|
written in HTML. Each document has two parts, a head and a body, defined by <head> and |
||||
|
<body> tags, respectively. The head part contains the document title, including the <title> |
||||
|
tag and other information the browser can use when rendering the document, and the body |
||||
|
part holds the actual contents of the document. The header is optional. For more information, |
||||
|
refer to Supplement V.A, “HTML and XHTML Tutorial.” |
||||
<applet> tag |
The complete syntax of the <applet> tag is as follows: |
||||
|
<applet |
||||
|
[codebase = applet_url] |
||||
|
code = classfilename.class |
||||
|
width = applet_viewing_width_in_pixels |
||||
|
height = applet_viewing_height_in_pixels |
||||
|
[archive = archivefile] |
||||
|
[vspace = vertical_margin] |
||||
|
[hspace = horizontal_margin] |
||||
|
[align = applet_alignment] |
||||
|
[alt = alternative_text] |
||||
|
> |
|
|
|
|
<param> tag |
<param name = param_name1 value = param_value1> |
||||
|
<param name = param_name2 value = param_value2> |
||||
|
... |
|
|
|
|
|
<param name = param_name3 value = param_value3> |
||||
|
</applet> |
||||
|
The code, width, and height attributes are required; all the others are optional. The |
||||
|
<param> tag will be introduced in §18.7, “Passing Strings to Applets.” The other attributes |
||||
|
are explained below. |
||||
codebase attribute |
■ codebase specifies a base where your classes are loaded. If this attribute is not used, |
||||
|
|
the Web browser loads the applet from the directory in which the HTML page is |
|||
|
|
located. If your applet is located in a different directory from the HTML page, you |
|||
|
|
must specify the applet_url for the browser to load the applet. This attribute |
|||
|
|
enables you to load the class from anywhere on the Internet. The classes used by the |
|||
|
|
applet are dynamically loaded when needed. |
|||
archive attribute |
■ archive instructs the browser to load an archive file that contains all the class files |
||||
|
|
needed to run the applet. Archiving allows the Web browser to load all the classes |
18.3 The HTML File and the <applet> Tag 617
from a single compressed file at one time, thus reducing loading time and improving performance. To create archives, see Supplement III.Q, “Packaging and Deploying Java Projects.”
■ vspace and hspace specify the size, in pixels, of the blank margin to pad around the applet vertically and horizontally.
■align specifies how the applet will be aligned in the browser. One of nine values is used: left, right, top, texttop, middle, absmiddle, baseline, bottom, or absbottom.
■alt specifies the text to be displayed in case the browser cannot run Java.
18.3.1Viewing Applets from a Web Browser
To display an applet from a Web browser, open the applet’s HTML file (e.g., DisplayLabel.html). Its output is shown in Figure 18.3(a).
(a) |
(b) |
FIGURE 18.3 The DisplayLabel program is loaded from a local host in (a) and from a Web server in (b).
To make your applet accessible on the Web, you need to store the DisplayLabel.class and DisplayLabel.html on a Web server, as shown in Figure 18.4. You can view the applet from an appropriate URL. For example, I have uploaded these two files on Web server www.cs.armstrong.edu/. As shown in Figure 18.3(b), you can access the applet from www.cs.armstrong.edu/liang/intro8e/book/DisplayLabel.html.
|
http://www.webserver.com/appropriatepath/DisplayLabel.html |
Web Server |
||
|
||||
Web Browser |
|
|
|
The .html file and applet’s .class files |
|
|
|
|
|
|
|
HTML Page |
are stored in the Web server. |
|
|
|
|
||
|
|
|
|
|
FIGURE 18.4 A Web browser requests an HTML page from a Web server.
18.3.2Viewing Applets Using the Applet Viewer Utility
You can test the applet using the applet viewer utility, which can be invoked from the DOS
prompt using the appletviewer command from c:\book, as shown in Figure 18.5(a). Its out- appletviewer put is shown in Figure 18.5(b).
The applet viewer functions as a browser. It is convenient for testing applets during development without launching a Web browser.