Unit 3 Applets: Structure Page Nos
Unit 3 Applets: Structure Page Nos
Structure
3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 Introduction Objectives The Applet Class Applet Architecture An Applet Skeleton: Initialization and Termination Handling Events HTML Applet Tag Summary Solutions/Answers
Page Nos.
43 43 43 44 46 50 54 59 59
3.0
INTRODUCTION
You are already familiar with several aspects of Java applications programming, discussed in earlier blocks. In this Unit you will learn another type of Java programs called Java Applets. As you know, in Java you can write two types of programmes, Applications and Applets. Unlike a Java application that executes from a command window, an Applet runs in the Appletviewer ( a test utility for Applets that is included with the J2SDK) or a World Wide Web browser such as Microsoft Internet Explorer or Netscape Communicator. In this Unit, you will also learn how to work with event driven programming. You are very familiar with Windows applications. In these application environments, program logic doesnt flow from the top to the bottom of the program as it does in most procedural code. Rather, the operating system collects events, and the program responds to them. These events may be mouse clicks, key presses, network data arriving on the Ethernet port, or any other event from about two dozen other possibilities. The operating system looks at each event, determines what program it was intended for, and places the event in the appropriate programs event queue. Every application program has an event loop. This is just a while loop which loops continuously. On every pass through the loop, the application retrieves the next event from its event queue and responds accordingly.
3.1 OBJECTIVES
After going through this Unit, you will be able to: describe Java Applets and its Importance; explain Applet architecture; compile and Execute Java Applet programs; use Event Handling constructs of Java programs, and apply various HTML tags to exec ute the Applet programs.
43
Advanced concepts
browser, and playing audio clips in Applets. In Java 2, class Javax.swing. JApplet is used to define an Applet that uses the Swing GUI components. As you know, in Java class hierarchy Object is the base class of the Java.lang package. The Applet is placed into the hierarchy as follows: Java.lang.Object
Java.awt.Component
Java.awt.Container
Java.awt.Panel
Java.applet.Applet Now, let us see what you should do using Java Applet and what you should not do using it. Below is a list of Dos and Donts for Java Applets: Dos
Draw pictures on a web page Create a new window and draw the picture in it Play sounds Receive input from the user through the keyboard, or the mouse Make a network connection to the server from where the Applet is downloaded, and send to and receive arbitrary data from that server.
Donts
Write data on any of the hosts disks Read any data from the hosts disks without the users permission. In some environments, notably Netscape, an Applet cannot read data from the users disks even with permission Delete files Read from or write to arbitrary blocks of memory, even on a non-memoryprotected operating system like the MacOS Make a network connection to a host on the Internet other than the one from which it was downloaded Call the native API directly (though Java API calls may eventually lead back to native API calls) Introduce a virus or Trojan horse into the host system.
3.3
APPLET ARCHITECTURE
Java Applets are essentially Java programs that run within a web page. Applet programs are Java classes that extend the Java.Applet.Applet class and are embedded by reference within a HTML page. You can observe that when Applets are combined with HTML, they can make an interface more dynamic and powerful than with HTML alone. While some Applets do nothing more than scroll text or play
44
animations, but by incorporating these basic features in web pages you can make them dynamic. These dynamic web pages can be used in an enterprise application to view or manipulate data coming from some source on the server. For example, an Applet may be used to browse and modify records in a database or control runtim e aspects of some other application running on the server. Besides the class file defining the Java Applet itself, Applets can use a collection of utility classes, either by themselves or archived into a JAR file. The Applets and their class files are distributed through standard HTTP requests and therefore can be sent across firewalls with the web page data. Applet code is refreshed automatically each time the user revisits the hosting web site. This keeps full application up to date on each client desktop on which it is running. Since Applets are extensions of the Java platform, you can reuse existing Java components when you build web application interface with Applets. As we will see in examples in this Unit, we can use complex Java objects, developed originally for server-side applications, as components of your Applets. In fact, you can write Java code that operates as either an Applet, or an application. In Figure 1, you can see that by using Applet program running in a Java-enabled web browser, you can communicate to the server. Basic WWW/Applet Architecture
Applets
JVM
Applet
F
1)
45
Advanced concepts
2)
3)
4)
Now, we will discuss the Applet methods around which Applet programming moves.
3.4
In this section we will discuss the Applet life cycle. If you think about the Basic Applet Life Cycle, the points listed below should be thought of: 1) 2) 3) 4) 5) 6) 7) 8) The browser reads the HTML page and finds any <APPLET> tags. The browser parses the <APPLET> tag to find the CODE and possibly CODEBASE attribute. The browser downloads the Class file for the Applet from the URL (Uniform Resource Locator) found in the last step. The browser converts the raw bytes downloaded into a Java class, that is a Java.lang.Class object. The browser instantiates the Applet class to form an Applet object. This requires the Applet to have a no-args constructor. The browser calls the Applets init () method. The browser calls the Applets start () method. While the Applet is running, the browser passes all the events intended for the Applet, like mouse clicks, key presses, etc. to the Applets handle Event () method. The default method paint() in Applets just draw messages or graphics (such as lines, ovals etc.) on the screen. Update events are used to tell the Applet that it needs to repaint itself. The browser calls the Applets stop () method. The browser calls the Applets destroy () method.
9)
10) 11)
46
In brief, you can say that, all Applets use the following five methods: public void init (); public void start(); public void paint(); public void stop(); public void destroy(); Every Applet program uses these methods in its life cycle. Their methods are defined in super class, Java.applet. Applet. It has others too, but right now I just want to talk about these five. In the super class, these are simply do-nothing methods. Subclasses may override these methods to accomplish certain tasks at certain times. For example, public void init() {} init () method is used to read parameters that were passed to the Applet via <PARAM> tags becaus e it is called exactly once, when the Applet starts up. If there is such a need in your program you can override init() method. Since these methods are declared in the super class, the Web browser can invoke them when it needs, without knowing in advance whether the method is implemented in the super class or the subclass. This is a good example of polymorphism. A brief description of init (), start (), paint (), stop (), and destroy () methods are given below. init () method: The init() method is called exactly once in an Applets life, when the Applet is first loaded. Its normally used to read PARAM tags, start downloading any other images or media files you need, and to set up the user interface. Most Applets have init () methods. start () method: The start() method is called at least once in an Applets life, when the Applet is started, or restarted. In some cases it may be called more than once. Many Applets that you write will not have an explicit start () method and will merely inherit one from their super class. A start() method is often used to start any threads the Applet will need while it runs. paint () method: The task of the paint () method is to draw graphics (such as lines, rectangles, and string on characters on the screen). stop() method: The stop () method is called at least once in an Applets life, when the browser leaves the page in which the Applet is embedded. The Applets start () method will be called if at some later point the browser returns to the page containing the Apple t. In some cases, the stop () method may be called multiple times in an Applets life. Many Applets you write will not have explicit stop () methods and will merely inherit one from their super class. Your Applet should use the stop () method to pause any running threads. When your Applet is stopped, it should not use any CPU cycles. destroy () method: The destroy() method is called exactly once in an Applets life, just before the web browser unloads the Applet. This method is generally used to perform any final clean-up. For example, an Applet that stores state on the server might send some data back to the server before it is terminated. Many Applet programs generally dont have explicit destroy () methods and just inherit one from their super class. Let us take one example to explain the use of the methods explained above. For example, in a video Applet, the init () method might draw the controls and start
Applets
47
Advanced concepts
loading the video file. The start () method would wait until the file was loaded, and then start playing it. The stop () method would pause the video, but not rewind it. If the start () method were called again, the video would pick up from where it left off; it would not start over from the beginning. However, if destroy () were called and then init (), the video would start over from the beginning. The point to note here is, if you run an Applet program using Appletviewer, selecting the restart menu item calls stop () and then start (). Selecting the Reload menu item calls stop (), destroy (), and in it (), in the order. Note 1: The Applet start () and stop () methods are not related to the similarly named methods in the Java.lang.Thread class, you have studied in Block 3 Unit 1. (i) Your own code may occasionally invoke star t() and stop(). For example, it is customary to stop playing an animation when the user clicks the mouse in the Applet and restart it when s/he clicks the mouse again. (ii) Now we are familiar with the basic needs and ways to write Applet program. You can see a simple Applet program given below to say Hello World. import Java.applet.Applet; import Java.awt.Graphics; public class HelloWorldApplet extends Applet { public void paint(Graphics g) { g.drawString("Hello world!", 50, 25); } } Observe that this Applet version of Hello World is a little more complicated than an application program to say Hello World, and it will take a little more effort to run it as well. First you have to type in the source code and save it to a file called HelloWorldApplet.Java. Compile this file in the usual way. If all is well, a file called HelloWorldApplet.class will be created. Now you need to create an HTML file that will include your Applet. The following simple HTML file will do. <HTML> <HEAD> <TITLE> Hello World </TITLE> </HEAD> <BODY> This is the Applet:<P> <Applet code="HelloWorldApplet" width="150" height="50"> </Applet> </BODY> </HTML> Save this file as HelloWorldApplet.html in the same directory as the HelloWorldApplet.class file.
Note 2:
48
When youve done that, load the HTML file into a Java enabled browser like Internet Explorer or Suns Applet viewer. You should see something like the following, though of course, the exact details depend on which browser you use. If the Applet compiled without error and produced a HelloWorldApplet.class file, and yet you dont see the string "Hello World" in your browser, the chances are that the class file is in the wrong place. Make sure HelloWorldApplet.class is in the same directory as HelloWorld.html. Also make sure that youre using a version of Netscape or Internet Explorer which supports Java. Not all versions do. In any case Netscapes Java support is less than perfect, so if you have trouble with an Applet, the first thing to try is load it into Suns Applet Viewer. If the Applet Viewer has a problem, then chances are pretty good that the problem is with the Applet and not with the browser. According to Sun An Applet is a small program that is intended not to be run on its own, but rather to be embedded inside another application. The Applet class provides a standard interface between Applets and their environment. The output of the program will be:
Applets
You know that GUI programming is heavily dependent on events like mouse click, button pressed, key pressed, etc. Java also supports event handling. Now let us see how these events are handled in Java.
F
1)
2)
49
Advanced concepts
3)
3.5
HANDLING EVENTS
You are leaving for work in the morning and someone rings the doorbell. That is an event! In life, you encounter events that force you to suspend other activities and respond to them immediately. In Java, events represent all actions that go on between the user and the application. Javas Abstract Windowing Toolkit (AWT) comm unicates these actions to the programs using events. When the user interacts with a program, let us say, by clicking a command button, the system creates an event representing the action and delegates it to the event-handling code within the program. This code determines how to handle the event so that the user gets the appropriate response. Originally, JDK 1.0.2 applications handled events using an inheritance model. A container sub class inherits the action () and handle Event () methods of its parent and handled the events for all components it contained. For instance, the following code would represent the event handler for a panel containing an OK and a Cancel button: public boolean handleEvent(Java.awt.Event e) { if (e.id == Java.awt.Event.ACTION_EVENT) { if (e.target == buttonOK) { buttonOKPressed(); } else if (e.target == buttonCancel) ( buttonCancelPressed(); ) } return super.handleEvent(e); } The problem with this method is that events cannot be delivered to specific objects. Instead, they have to be routed through a universal handler, which increases complexity and therefore, weakens your design. But Java 1.1 onward has introduced the concepts of the event delegation model. This model allows special classes, known as adapter classes to be built and registered with a component in order to handle certain events. Three simple steps are required to use this model: 1) Implement the desired listener interface in your adapter class. Depending on what event you are handling, a number of listener interfaces are available. These include: ActionListener, WindowListener, MouseListener, MouseMotionListener, ComponentListener, FocusListener, and ListSelectionListener. Register the adapter listener with the desired component(s). This can be in the form of an add XXX Listener () method supported by the component for example include add ActionListener (), add MouseListener (), and add FocusListener ().
2)
50
3)
Implement the listener interfaces methods in your adapter class. It is in this code that you will actually handle the event.
Applets
The event delegation model allows the developer to separate the components display (user interface) from the event handling (application data) which results in a cleaner and more object-oriented design. Components of an Event: It can be put under the following categories: 1) Event Object: When the user interacts with the application by clicking a mouse button or pressing a key, an event is generated. The Operating System traps this event and the data associated with it. For example, information about the time at which the event occurred, the event types (like keypress, or mouse click, etc.). This data is then passed on to the application to which the event belongs. You must note that in Java, objects which describe the events themselves, represent events. Java has a number of classes that describe and handle different categories of events. 2) Event Source: An event source is the object that generated the event, for example, if you click a button, an ActionEvent Object is generated. The object of the ActionEvent class contains information about the event (button click). Event-Handler: This is a method that understands the event and processes it. The event-handler method takes the Event object as a parameter. You can specify the objects that are to be notified when a specific event occurs. If the event is irrelevant, it is discarded.
3)
The four main components based on this model are Event classes, Event Listeners, Explicit event handling and Adapters. Let me give you a closer look at them, one by one. Event Classes: The EventObject class is at the top of the event class hierarchy. It belongs to the Java.util package, while most of the other event classes are present in Java.awt.event package. The get Source () method of the EventObject class returns the object that initiated the event. The getId () method returns the nature of the event. For example, if a mouse event occurs, you can find out whether the event was a click, a press, a move or release from the event object. AWT provides two conceptual types of events: Semantic and Low-level events. Semantic event : These are defined at a higher-level to encapsulate the semantics of user interface components model. Now, let us see what the various semantic event classes are, and when they are generated: An ActionEvent object is generated when a component is activated. An Adjustment Event object is generated when scrollbars and other adjustment elements are used.
51
Advanced concepts
A Text Event object is generated when text of a component is modified. An Item Event is generated when an item from a list, a choice or checkbox is selected. Low-Level Events: These events are those that represent a low -level input or windows-system occurrence on a visual component on the screen. The various low-level event classes and what they generate are as follows:
A Container Event object is generated when components are added or removed from a container. A Component Event object is generated when a component is resized, moved, etc. A Focus Event object is generated when component receives focus for input. A Key Event object is generated when a key on the keyboard is pressed, released, etc. A Window Event object is generated when a window activity, like maximizing or close, occurs. A Mouse Event object is generated when a mouse is used. A Paint Event object is generated when a component is painted.
Event Listeners: An object delegates the task of handling an event to an event listener. When an event occurs, an event object of the appropriate type (as explained below) is created. This object is passed to a Listener. The listener must implement the interface that has the method for event handling. A component can have multiple listeners, and a listener can be removed using remove Action Listener () method. You can understand a listener as a person who has listened to your command and is doing the work which you commanded him to do so. As you have studied about interfaces in Block 2, Unit 3 of this course, an Interface contains cons tant values and method declaration. The Java.awt.event package contains definitions of all event classes and listener interface. The semantic listener interfaces defined by AWT for the above-mentioned semantic events, are: ActionListener AjdustmentListener ItemListener TextListener
The low-level event listeners are as follows: ComponentListener ContainerListener FocusListener KeyListener MouseListener MouseMotionListener WindowsListener.
52
Action Event using the ActionListener interface : In Figure 2 the Event Handling Model of AWT is given. This figure illustrates the usage of ActionEvent and ActionListener interface in a Classic Java Application.
Applets
Event object
You can see, in the program given below, that the Button Listener is handling the event generated by pressing button Click Me. Each time the button Click Me is pressed; the message The Button is pressed is printed in the output area. As shown in the output of this program, the message. The Button is pressed is printed three times, since Click Me is pressed thrice. import Java.awt.event.*; import Java.awt.*; public class MyEvent extends Frame { public MyEvent() { super("Window Title: Event Handling"); Button b1; b1 = new Button("Click Me"); //getContentPane().add(b1); add(b1); Button Listener listen = new Button Listener(); b1.add Action Listener(listen); set Visible (true); set Size (200,200); } public static void main (String args[]) { My Event event = new My Event(); } }; // note the semicolon class Button Listener implements ActionListener { public void action Performed (ActionEvent evt) { Button source1 = (Button) evt. get Source (); System. out. print ln ("The Button is Pressed"); } } Output of the program:
53
Advanced concepts
The Button is Pressed The Button is Pressed The Button is Pressed How does the above Application work? The answer to this question is given below in steps: 1) 2) 3) The execution begins with the main method. An Object of the MyEvent class is created in the main method, by invoking the constructor of the MyEvent class. Super () method calls the constructor of the base class and sets the title of the window as given, Windows Title: Event Handling. A button object is created and placed at the center of the window. Button object is added in the event. A Listener Object is created. The addAction Listener () method registers the listener object for the button. SetVisible () method displays the window. The Application waits for the user to interact with it. Then the user clicks on the button labeled Click Me: The ActionEvent event is generated. Then the ActionEvent object is created and delegated to the registered listener object for processing. The Listener object contains the actionPerformed () method which processes the ActionEvent In the actionPerformed () method, the reference to the event source is retrieved using getSource () method. The message The Button is Pressed is printed.
4) 5) 6) 7) 8) 9) 10)
3.6
Till now, you have written some Applets and have run them in the browser or Appletviewer. You have used basic tags needed for running an Applet program. Now you will learn some more tags that contains various attributes. Applets are embedded in web pages using the <APPLET> and </APPLET> tags. APPLET elements accept The. class file with the CODE attribute. The CODE attribute tells the browser where to look for the compiled .class file. It is relative to the location of the source document. If the Applet resides somewhere other than the same directory where the page lives, do not just give a URL for its location. Rather, you have to point at the CODEBASE.
54
The CODEBASE attribute is a URL that points at the directory where the .class file is. The CODE attribute is the name of the .class file itself. For instance if on the HTML page in the previous section had you written <APPLET CODE="HelloWorldApplet" CODEBASE="classes" WIDTH="200" HEIGHT="200"> </APPLET> then, the browser would have tried to find HelloWorldApplet.class in the classes subdirectory inside in directory where the HTML page that included the Applet is contained. On the other hand, if you had written <APPLET CODE="HelloWorldApplet" CODEBASE="http://www.mysite.com/classes" WIDTH="200" HEIGHT="200"> </APPLET> then, the browser would try to retrieve the Applet from http://www.mysite.com/classes/HelloWorldApplet.class regardless of where the HTML page is residing. If the Applet is in a non-default package, then the full package qualified name must be used. For example, <APPLET CODE="mypackage. HelloWorldApplet" CODEBASE="c:\Folder\Java\" WIDTH="200" HEIGHT="200"> </APPLET> The HEIGHT and WIDTH attributes work exactly as they do with IMG, specifying how big a rectangle the browser should set aside for the Applet. These numbers are specified in pixels. Spacing Preferences The <APPLET> tag has several attributes that define how it is positioned on the page. The ALIGN attribute defines how the Applets rectangle is placed on the page relative to other elements. Possible values include LEFT, RIGHT, TOP, TEXTTOP, MIDDLE, ABSMIDDLE, BASELINE, BOTTOM and ABSBOTTOM. These attributes is optional. You can specify an HSPACE and a VSPACE in pixels to set the amount of blank space between an Applet and the surrounding text. The HSPACE and VSPACE attributes are optional. <Applet code="HelloWorldApplet" width=200 height=200 ALIGN=RIGHT HSPACE=5 VSPACE=10> </APPLET> The ALIGN, HSPACE, and VSPACE attributes are identical to the attributes used by the <IMG> tag. Alternate Text The <APPLET> has an ALT attribute. An ALT attribute is used by a browser that understands the APPLET tag, but for some reason cannot play the Applet. For instance, if youve turned off Java in Netscape Navigator 3.0, then the browser should display the ALT text. The ALT tag is optional. <Applet code="HelloWorldApplet" CODEBASE="c:\Folder\classes" width="200" height="200" ALIGN="RIGHT" HSPACE="5" VSPACE="10" ALT="Hello World!"> </APPLET>
Applets
55
Advanced concepts
ALT is not used by browsers that do not understand <APPLET> at all. For that purpose <APPLET> has been defined to require a closing tag, </APPLET>. All raw text between the opening and closing <APPLET> tags is ignored by a Java capable browser. However, a non-Java-capable browser will ignore the <APPLET> tags instead and read the text between them. For example, the following HTML fragment says Hello World!, both with and without Java-capable browsers. <Applet code="HelloWorldApplet" width=200 height=200 ALIGN=RIGHT HSPACE=5 VSPACE=10 ALT="Hello World!"> Hello World!<P> </APPLET> Naming Applets You can give an Applet a name by using the NAME attribute of the APPLET tag. This allows communication between different Applets on the same Web page. <APPLET CODE="HelloWorldApplet" NAME="Applet1" CODEBASE=c: Folder\Classes WIDTH="200" HEIGHT="200" \ align="right" HSPACE="5" VSPACE="10" ALT="Hello World!"> Hello World!<P> </APPLET> JAR Archives HTTP 1.0 uses a separate connection for each request. When youre downloading many small files, the time required to set up and tear down the connections can be a significant fraction of the total amount of time needed to load a page. It would be better if you could load all the HTML documents, images, Applets, and sounds in a page, in one connection. One way to do this without changing the HTTP protocol is to pack all those different files into a single archive file, perhaps a zip archive, and just download that. We are not quite there, yet. Browsers do not yet understand archive files, but in Java 1.1 Applets do. You can pack all the images, sounds; and.class files that an Applet needs into one JAR archive and load that, instead of the individual files. Applet classes do not have to be loaded directly. They can also be stored in JAR archives. To do this you use the ARCHIVES attribute of the APPLET tag. <APPLET CODE="HelloWorldApplet" WIDTH="200" HEIGHT="100" ARCHIVES="HelloWorld.jar"> <hr> Hello World! <hr> </APPLET> In this example, the Applet class is still HelloWorldApplet. However, there is no HelloWorldApplet.class file to be downloaded. Instead the class is stored inside the archive file HelloWorld.jar. Sun provides a tool for creating JAR archives with its JDK 1.1, onwards.
56
For Example % jar cf HelloWorld.jar *.class This puts all the .class files in the current directory in a file named "HelloWorld.jar". T he syntax of the jar command is similar to the Unix tar command. The Object Tag HTML 4.0 deprecates the <APPLET> tag. Instead, you are supposed to use the <OBJECT> tag. For the purposes of embedding Applets, the <OBJECT> tag is used almost exactly like the <APPLET> tag, except that the class attribute becomes the classid attribute. For example: <OBJECT classid="MyApplet" CODEBASE=c:\Folder\Classes width=200 height=200 ALIGN=RIGHT HSPACE=5 VSPACE=10> </OBJECT> The <OBJECT> tag is also used to embed ActiveX controls and other kinds of active content. It has a few additional attributes to allow it to do that. However, for the purposes of Java, you dont need to know about these. The <OBJECT> tag is supported by Netscape and Internet Explorer. It is not supported by earlier versions of these browsers. <APPLET> is unlikely to disappear anytime soon in the future. You can support both by placing an <APPLET> element inside an <OBJECT> element like this: <OBJECT classid="MyApplet" width="200" height="200"> <APPLET code="MyApplet" width="200" height="200"> </APPLET> </OBJECT> You will notice that browsers that understand <OBJECT> will ignore its content while the other browsers will display its content. PARAM elements are the same for <OBJECT> as for <APPLET >. Passing Parameters to Applets Parameters are passed to Applets in NAME and VALUE attribute pairs in <PARAM> tags between the opening and closing APPLET tags. Inside the Applet, you read the values passed through the PARAM tags with the getParameter() method of the Java.Applet.Applet class. The program below demonstrates this with a generic string drawing Applet. The Applet parameter "Message, is the string to be drawn. import Java.Applet.*; import Java.awt.*; public class DrawStringApplet exten ds Applet { private String str = "Hello!"; public void paint(Graphics g) { String str = this.getParameter("Message"); g.drawString(str, 50, 25); } }
Applets
57
Advanced concepts
You also need an HTML file that references your Applet. The following simple HTML file will do: <HTML> <HEAD> <TITLE> Draw String </TITLE> </HEAD> <BODY> This is the Applet:<P> <APPLET code="Draw String Applet" width="300" height="50"> <PARAM name="Message" value="My new Parameter value!"> </APPLET> </BODY> </HTML>
Of course, you are free to change My new Parameter value! to a message of your choice. You only need to change the HTML, not the Java source code. PARAMs let you customize Applets without changing or recompiling the code. This Applet is very similar to the HelloWorldApplet. However, rather than hardcoding the message to be printed it is read into the variable str through get parameter () method from a PARAM in the HTML. You pass get Parameter(), a string that names the parameter you want. This string should match the name of a <PARAM> tag in the HTML page. getParameter() returns the value of the parameter. All values are passed as strings. If you want to get another type like an integer, then youll need to pass it as a string and convert it to the type you really want. The <PARAM> HTML tag is also straightforward. It occurs between <APPLET> and </APPLET>. It has two attributes of its own, NAME and VALUE. NAME identifies which PARAM this is. VALUE is the value of the PARAM as a String. Both should be enclosed in double quote marks if they contain white space. An Applet is not limited to one PARAM. You can pass as many named PARAMs to an Applet as you like. An Applet does not necessarily need to use all the PARAMs that are in the HTML. You can be safely ignore additional PARAMs. Processing an Unknown Number of Parameters Sometimes, the parameters are not known to you. In that case, most of the time you have a fairly good idea of what parameters will and will not be passed to your Applet, or perhaps you want to write an Applet that displays several lines of text. While it would be possible to cram all this information into one long string, thats not too friendly to authors who want to use your Applet on their pages. It is much more sensible to give each line its own <PARAM> tag. If this is the case, you should name
58
the tags via some predictable and numeric scheme. For instance, in the text example, the following set of <PARAM> tags would be sensible: <PARAM name="param1" value="Hello Good Morning"> <PARAM name="param2" value="Here I am ">
Applets
F
1)
2)
Write a program in which, whenever you click the mouse on the frame, the coordinates of the point on which the mouse is clicked are displayed on the screen.
3)
Write an Applet program in which you place a button and a text area. When you click on the button, your name and address is displayed in the text area. You have to take your name and address using < PARAM>.
3.7 SUMMARY
In this Unit, we have discussed Applet programs. Applets are secure programs that run inside a web browser and are a subclass of Java.Applet. Applet.or its an instance of subclass of Java.Applet. Applet goes through five phases, e.g., start(), init(),paint(),stop() and destroy(). paint() is one of the three methods that are guaranteed to be called automatically when any Applet begins execution. These three methods are init, start and paint, and they are guaranteed to be called in that order. These methods are called from Appletviewer or the browser in which the Applet is executing .The <Applet> tag first attribute or indicates the file containing the compiled Applet class. It specifies height and width of the Applet tag to process an event you must register an event listener and implement one or more event handlers. The use of event listeners in event handling is known as the Event Delegation Model. You have seen various events and event listeners associated with each component. The information about a GUI event is stored in an object of a class that extends AWT Event.
3.8
SOLUTIONS/ANSWERS
59
Advanced concepts
standard interface between Applets and their environment. It is a secure program that runs inside a web browser. An Applet can be embedded in an HTML page. Applets differ from Java applications in the way that they are not allowed to access certain resources on the local computer, such as files and serial devices (modems, printers, etc.), and are prohibited from communicating with most other computers across a network. The common rule is that an Applet can only make an Internet connection to the computer from which the Applet was sent.
2)
You can surf the web without worrying that a Java Applet will format your hard disk or introduce a virus into your system. In fact you must have noticed that Java Applets and applications are much safer in practice than code written in traditional languages. This is because even code from trusted sources is likely to have bugs. However, Java programs are much less susceptible to common bugs involving memory access than are programs written in traditional languages like C. Furthermore, the Java runtime environment provides a fairly robust means of trapping bugs before they bring down your system. Most users have many more problems with bugs than they do with deliberately malicious code. Although users of Java applications arent protected from out and out malicious code, they are largely protected from programmer errors. Applets implement additional security restrictions that protect users from malicious code, too. This is accomplished through the Java.lang.SecurityManager class. This class is sub classed to provide different security environments in different virtual machines. Regrettably, implementing this additional level of protection does somewhat restrict the actions an Applet can perform.
Applets are not allowed to write data on any of the hosts disks or read any data from the hosts disks without the users permission. In some environments, notably Netscape, an Applet cannot read data from the users disks even with permission. 3) An Applet is a Java program that runs in the Appletviewer or a World Wide Web browser such as Netscape Communicator or Microsoft Internet Explorer. The Applet viewer (or browser) executes an Applet when a Hypertext Markup Language (HTML) document containing the Applet is opened in the Applet viewer (or web browser). Object Oriented Programming (OOP) models real world objects with software counterparts. It takes advantage of class relationships where objects of a certain class have the same characteristics. It takes advantage of inheritance relationships where newly created classes are derived by inheriting characteristics of existing classes; yet contain unique characteristics of their own. Object Oriented concepts implemented through Applet programming can communicate one place to other through web pages.
4)
2)
3)
60
every Applet is always init (), start () and paint () this provides a start-up sequence of method calls as every Applet begins execution. The stop () method w ould pause the Applet. However, destroy () will terminate the application.
Applets
2) import Java.Applet.*; import Java.awt.*; import Java.awt.event.*; public class TestMouse1 { public static void main (String[] args) { Frame f = new Frame("TestMouseListener"); f.setSize(500,500); f.setVisible(true); f.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { System.out.println("Mouse clicked: ("+e.getX()+","+e.getY()+")"); } }); } } 3) DrawStringApplet1.Java file: import Java.Applet.*; import Java.awt.*; public class DrawStringApplet1 extends Applet { public void paint(Graphics g) { String str1 = this.getParameter("Message1"); g.drawString(str1, 50, 25); String str2 = this.getParameter("Message2"); g.drawString(str2, 50, 50); } } DrawStringApplet1.html file: <HTML> <HEAD> <TITLE> Draw String </TITLE>
61
Advanced concepts
</HEAD> <BODY> <APPLET code="DrawStringApplet1" width="300" height="250"> <PARAM name="Message1" value="M. P. Mishra"> <PARAM name="Message2" value="SOCIS, IGNOU, New Delhi 68"> </APPLET> </BODY> </HTML> Compile DrawStringApplet1.Java file then run DrawStringApplet1.html file either in web browser or through Appletviewer.
62