Java By Example PHẦN 8 pptx

59 224 0
Java By Example PHẦN 8 pptx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

parameter's values and supply default values for those parameters that are missing or invalid. For example, to make sure that your applet has a text string to display, you might use lines like this: str = getParameter("text"); if (str == null) str = "Default Text"; NOTE If you decide to release your applets so other people can use them in their Web pages, be sure that you include a separate documentation file that describes the applet's parameters and shows how to use them. Example: Using Default Parameters in an Applet You can now extend the ConfigApplet2 so that it provides default values for each parameter. When you've done this, the applet can run without generating errors no matter what parameters the user chooses to include or ignore. Listing 26.7 is the new version, called ConfigApplet3. Notice that although the program now checks for missing parameters, it doesn't limit the values to any ranges or otherwise check their validity. Because the text parameter will always be a string, there's really nothing you need to check for (except null). However, you may want to limit the font size or make sure that the display location is inside the applet's window. Listing 26.8 is the HTML document used to load and run the applet as it's displayed in Figure 26.4. Figure 26.4 : This is ConfigApplet3 running under Appletviewer. Listing 26.7 ConfigApplet3.java: This Applet Provides Default Values for All Parameters. import java.awt.*; import java.applet.*; public class ConfigApplet3 extends Applet { String str; Point position; public void init() { HandleTextParam(); HandleTypeSizeParam(); HandlePositionParam(); } public void paint(Graphics g) { g.drawString(str, position.x, position.y); } protected void HandleTextParam() { str = getParameter("text"); if (str == null) str = "Default Text"; } protected void HandleTypeSizeParam() { String s = getParameter("typesize"); if (s == null) s = "24"; int typeSize = Integer.parseInt(s); Font font = new Font("TimesRoman", Font.BOLD, typeSize); setFont(font); } protected void HandlePositionParam() { String s = getParameter("xpos"); if (s == null) s = "20"; int xpos = Integer.parseInt(s); s = getParameter("ypos"); if (s == null) s = "50"; int ypos = Integer.parseInt(s); position = new Point(xpos, ypos); } } Tell Java that the applet uses the classes in the awt package. Tell Java that the applet uses the classes in the applet package. Derive the ConfigApplet3 class from Java's Applet class. Declare the class's data fields. Override the init() method. Call the methods that retrieve and validate the parameters. Override the paint() method. Display the given string. Define the HandleTextParam() method. Retrieve the text parameter. If the parameter is null, set str to the default text. Define the HandleTypeSizeParam() method. Retrieve the typesize parameter. If the parameter is null, set the parameter string to "24." Convert the parameter string to an integer. Create and set the font. Define the HandlePositionParam() method. Retrieve the xpos parameter. if xpos is null, set the parameter string to "20." Convert the parameter string to an integer. Retrieve the ypos parameter. if ypos is null, set the parameter string to "50." Convert the parameter string to an integer. Create the Point object with the position values. Listing 26.8 CONFIGAPPLET3.htmL: The HTML Document for ConfigApplet3. <title>Applet Test Page</title> <h1>Applet Test Page</h1> <applet code="ConfigApplet3.class" width=640 height=200 name="ConfigApplet3"> <PARAM NAME=text VALUE="Hi there!"> <PARAM NAME=typesize VALUE=144> <PARAM NAME=xpos VALUE=40> <PARAM NAME=ypos VALUE=140> </applet> Summary By supporting parameters, your applets are more flexible, which makes it easier for other people to incorporate them into their Web-page designs. Even if you don't plan to release your applets, using parameters can make your applets more powerful and your own Web pages easier to fine tune. Using the <PARAM> tag is more sensible than having to reprogram and recompile an applet every time you want it to do something slightly different. Keep in mind, though, that all parameters must have default values built into the applet's source code. Otherwise, you could end up with an error-ridden applet, something that won't do much for your reputation as a Java guru. Review Questions 1. What kind of applet user is likely to appreciate parameterized applets? 2. What are the two parts of the <PARAM> tag? 3. How can your applet retrieve the value of a parameter? 4. Where do you specify the values for an applet's parameters? 5. Do you need to recompile an applet in order to take advantage of new parameters? 6. How many parameters can you have in a single applet? 7. Why do you need to convert the values of some parameters? 8. Why is it important to supply default values for all parameters? Review Exercises 1. Write an applet that displays a rectangle on the screen. The rectangle's size should be specified using parameters. 2. Write an applet that uses a parameter to display a red, green, or blue background. 3. Modify ConfigApplet2 so that it not only checks for null parameters, but also checks for the parameters' validity. The type size should always be in the range of 10 to 72 points and the text should always be positioned so that it's never printed completely out of view. (You can find the solution to this exercise, called ConfigApplet4, in the CHAP26 folder of this book's CD-ROM.) Chapter 27 Images and Sounds CONTENTS ● Image Types ● Loading and Displaying an Image ❍ Example: Using the getDocumentBase() Method ❍ Example: Using the getCodeBase() Method ❍ Loading an Image ❍ Displaying an Image ❍ Example: Displaying an Image in an Applet ● Playing a Sound ❍ Example: Using the play() Method ❍ Example: Playing a Sound in an Applet ❍ Controlling Sounds ❍ Example: Using an AudioClip in an Applet ● Summary ● Review Questions ● Review Exercises If you've seen a lot of the applets that are floating around, you've undoubtedly noticed that many of them feature vivid graphics and even sound effects. When programming in a language such a C++, displaying graphics and playing sounds can be infamously difficult, thanks to the fact that these languages provide no direct support for handling these types of files. Even the Windows API, as immense as it is, provides little help when it comes to handling these graphical and aural chores. Java, on the other hand, was designed to make creating applets as easy as possible. For that reason, Java's classes handle almost all the difficulties associated with displaying images (commonly called bitmaps) and playing sounds. In this chapter, you use Java's power to add images and sounds to your applets. Image Types In the world of computers, there are many types of images, each of which is associated with a specific file format. These image types are usually identified by their file extensions, which include PCX, BMP, GIF, JPEG (or JPG), TIFF (or TIF), TGA, and more. Each of these file types was created by third-party software companies for use with their products, but many became popular enough to grow into standards. The PCX graphics file type, for example, began as the format for PC Paintbrush files, whereas BMP files are usually associated with the Windows graphical interface. If you were writing your Internet applications using a more conventional language like C++, you could choose to support whatever image type was most convenient for your use. This is because you'd have to write all the file-loading code from scratch, anyway. Java, on the other hand, comes complete with classes that are capable of loading image files for you. This convenience comes with a small price, however, since Java can load only GIF and JPEG image file formats. In this book, you'll use GIF files, which are more common, although JPEG files are rapidly gaining a reputation, especially for high- resolution, true-color images. Loading and Displaying an Image The first step in displaying an image in your applet is to load the image from disk. To do this, you must create an object of Java's Image class. This is fairly easy to do; however, in order to do so, you need to create an URL object that holds the location of the graphics file. You could just type the image's URL directly into your Java source code. If you do this, however, you have to change and recompile the applet whenever you move the graphics file to a different directory on your disk. A better way to create the image's URL object is to call either the getDocumentBase() or getCodeBase() method. The former returns the URL of the directory from which the current HTML file was loaded, whereas the latter returns the URL of the directory from which the applet was run. Example: Using the getDocumentBase() Method As I said previously, the getDocumentBase() method returns the URL of the directory from which the HTML document was loaded. If you're storing your images in the same directory (or a subdirectory of that directory) as your HTML files, you'd want to use this method to obtain an URL for an image. Suppose you have your HTML documents in a directory called PUBLIC and the image you want, called IMAGE.gif, is stored in a subdirectory of PUBLIC called IMAGES. A call to getDocumentBase() will get you the appropriate base URL. That call looks like this: URL url = getDocumentBase(); As you'll soon see, once you have the URL, you can load the file by using the URL along with the relative location of the image, which in this case would be IMAGES/IMAGE.gif. The full URL to the file would then be FILE:/C:/PUBLIC/IMAGES/IMAGE.gif. If you decided to move your public files to a directory called MYHOMEPAGE, the call to getDocumentBase() will give you the URL for that new directory, without your having to change the applet's source code. This new URL, once you included the relative location of the image file, would be FILE:/C:/MYHOMEPAGE/IMAGES/IMAGE.gif. Example: Using the getCodeBase() Method The getCodeBase() method works similarly to getDocumentBase(), except that it returns the URL of the directory from which the applet was loaded. If you're storing your images in the same directory (or a subdirectory of that directory) as your CLASS files, you'd want to call getCodeBase() to obtain an URL for an image. Suppose you have your CLASS files in a directory called CLASSES and the image you want (still called IMAGE.gif) is stored in a subdirectory of CLASSES called IMAGES. A call to getCodeBase() will get you the base URL you need to load the image. That call looks like this: URL url = getCodeBase(); Again, once you have the URL, you can load the file by using the URL along with the relative location of the image, which would still be IMAGES/IMAGE.gif. The full URL to the file would then be FILE:/C:/CLASSES/IMAGES/IMAGE.gif. Loading an Image Once you have the image's base URL, you're ready to load the image and create the Image object. You can complete both of these tasks at the same time, by calling your applet's getImage() method, like this: Image image = getImage(baseURL, relLocation); The getImage() method's two arguments are the URL returned by your call to getCodeBase() or getDocumentBase() and the relative location of the image. For example, assuming that you've stored your CLASS files in the directory C:\CLASSES and your images in the directory C:\CLASSES\IMAGES, you'd have a code that looks something like this: URL codeBase = getCodeBase(); Image myImage = getImage(codeBase, "images/myimage.gif"); After Java has executed the above lines, your image is loaded into the computer's memory and ready to display. Displaying an Image Displaying the image is a simple matter of calling the Graphics object's drawImage() method, like this: g.drawImage(myImage, x, y, width, height, this); This method's arguments are the image object to display, the X and Y coordinates at which to display the image, the width and height of the image, and the applet's this reference. TIP When you want to display an image with its normal width and height, you can call a simpler version of the drawImage() method, which leaves out the width and height arguments, like this: drawImage(image, x, y, this). This version of the method actually draws the image faster because it doesn't have to worry about reducing or expanding the image to the given width and height. It just blasts it on to the screen exactly as the image normally appears. You may be wondering where you can get the width and the height of the image. As it turns out (no doubt thanks to careful consideration by Java's programmers over hundreds of cups of coffee), the Image class has two methods, getWidth() and getHeight(), that return the width and height of the image. The complete code for displaying the image, then, might look like this: int width = image.getWidth(this); int height = image.getHeight(this); g.drawImage(image, x, y, width, height, this); [...]... Then, choose another site Figure 28. 4 : ConnectApplet2 running under Netscape Navigator 2.0 Figure 28. 5 : After clicking the Macmillan button Sure, you can do the same sort of thing with an HTML document using Web links But, let's face it, applets are way cooler Listing 28. 5 ConnectApplet2 .java: A "Favorite URLs" Applet import java. awt.*; import java. applet.*; import java. net.*; public class ConnectApplet2... a Java- compatible browser such as Netscape Navigator 2.0 When you do, you'll see a window similar to that shown in Figure 28. 1 In this figure, the user has already entered the URL he wishes to visit In Figure 28. 2, the browser has made the requested connection Figure 28. 3 shows the browser when the user enters an invalid URL string Figure 28. 1 : Here, the user is ready to make a connection Figure 28. 2... coincidence that when code "throws" an exception, Java expects the program to "catch" that exception.) When you create an URL object from a string, you must watch out for the MalformedURLException exception, which is one of the many exceptions defined by Java To do this, use the try and catch program blocks, as shown in Listing 28. 1 Listing 28. 1 LST 28_ 1.TXT: Handling URL Exceptions try { URL url =... exercise in the CHAP 28 folder of this book's CD-ROM.) Figure 28. 6 : The more Web-site buttons you add, the more places you can visit with a click of the mouse Chapter 29 Packages and Interfaces CONTENTS q q q q q Packages r Creating Your Own Packages r Example: Creating a Simple Package r Example: Using the New Package r Example: Extending the Package Interfaces r The Basic Interface r Example: Creating... it, but you've been using Java packages since the first applet you created That's because all of the Java Developer's Kit's classes are organized into packages You've been importing those packages into your source code with code similar to this: import java. awt.*; import java. applet.*; If you examine either of these lines, you'll see that each starts with the word java followed by a package name and an... element being separated by a dot The use of the different names separated by the dots illustrates the hierarchy that Java' s creators used when they created the Java packages This hierarchy is used not only as a way of referring to class names in source code, but also as a way to organize the CLASS files that comprise a class library If you look in your JAVA\ LIB folder, you'll find the JAVA folder, within... an advanced Java book In this chapter, though, you'll get a chance to use Java to communicate over the Internet by connecting to URLs that the user supplies URL Objects In the previous chapter, you got a quick introduction to URL objects when you obtained the location of graphics and sound files by calling the getDocumentBase() and getCodeBase() methods You used the URL objects returned by these methods... same directory as the applet (This sound file is included with the Java Developer's Kit and has been copied to this chapter's CD-ROM directory for your convenience.) Figure 27.3 : Click the button to hear the applet's sound file Listing 27.2 SoundApplet .java: An Applet That Plays a Sound File import java. awt.*; import java. applet.*; import java. net.*; public class SoundApplet extends Applet { Button button;... code in the try block, getting the AppletContext object and making the link to the URL In this case, Java completely ignores the catch block Example: Using an AppletContext in an Applet Ready for a full-fledged example? Listing 28. 3 is a complete applet that enables the user to link to an URL Listing 28. 4 is the HTML document that loads the applet Because this applet actually interacts with a browser... method's enable you to play, stop, and loop the sound Review Questions 1 2 3 4 5 What two types of image files can be loaded by a Java applet? What two parameters are required by methods such as getImage() and getAudioClip()? What's the only type of audio file recognized by Java? How do you display an image after it's loaded? Do image and sound files always have to be stored in the same directory as . can be loaded by a Java applet? 2. What two parameters are required by methods such as getImage() and getAudioClip()? 3. What's the only type of audio file recognized by Java? 4. How. applet's sound file. Listing 27.2 SoundApplet .java: An Applet That Plays a Sound File. import java. awt.*; import java. applet.*; import java. net.*; public class SoundApplet extends Applet { . SoundApplet2. Listing 27.3 SoundApplet2 .java: An Applet That Creates and Displays an AudioClip Object. import java. awt.*; import java. applet.*; import java. net.*; public class SoundApplet2 extends

Ngày đăng: 12/08/2014, 19:21

Từ khóa liên quan

Mục lục

  • Java By Example

    • Chapter 27 -- Images and Sounds

    • Chapter 28 -- Communications

    • Chapter 29 -- Packages and Interfaces

    • Chapter 30 -- Exceptions

Tài liệu cùng người dùng

Tài liệu liên quan