Sample Quiz Answers
For Chapter 7

THIS PAGE CONTAINS SAMPLE ANSWERS to the Quiz on Chapter 7 of this on-line Java textbook. Note that in many cases, there are lots of correct answers to a given question.

Question 1: What is the FontMetrics class used for?

Answer: An object that belongs to the class FontMetrics can be used to obtain information about the sizes of characters and strings that are drawn in a specific font. The font is specified when the FontMetrics object is created. If fm is a variable of type FontMetrics, then, for example, fm.stringWidth(str) gives the width of the string str and fm.getHeight() is the usual amount of vertical space allowed for one line of text.

Question 2: An off-screen canvas can be used to do double buffering. Explain this. (What are off-screen canvases? How are they used? Why are they important? What does this have to do with animation?)

Answer: In Java, an off-screen canvas is an object belonging to the class Image and created with the createImage() function. An off-screen canvas is a segment of the computer's memory that can be used as a drawing surface. What is drawn to the off-screen canvas is not visible on the screen, but the Image can be quickly copied onto the screen with a drawImage() command. It is important to use an off-screen canvas in a situation where the process of drawing the image should not be seen by the user. This is true, for example, in animation. Each frame of the animation can be composed in an off-screen Image and then copied to the screen when it is complete. The alternative would be to erase the screen and draw the next frame directly on the screen. This causes unacceptable flickering of the image.

Question 3: One of the main classes in the AWT is the Component class. What is meant by a component? What are some examples?

Answer: A Component represents a visual component of the computer's graphical user interface. Components can be added to "containers," such as applets and frames. Examples of Components are Buttons, TextFields, and Canvases. The Component class is abstract, which means that any actual component objects belong to subclasses of Component.

Question 4: What is the function of a LayoutManager in Java?

Answer: A LayoutManager implements some policy for laying out all the visual components that have been added to a container, such as an applet or panel. That is, it sets the sizes and positions of the components. Different types of layout managers have different rules about how components are to be arranged. Some standard layout manager classes are BorderLayout and GridLayout.

Question 5: What does it mean to use a null layout manager, and why would you want to do so?

Answer: If the layout manager for a container is set to null, then the programmer takes full responsibility for setting the sizes and positions of all of the components in that container. This gives the programmer more control over the layout, but the programmer has to do more work. For simple layouts in a container that does not change size, the setBounds() method of each component can be called when it is added to the container. If the container can change size, then the sizes and positions have to be recomputed when a size change occurs. This is done automatically by a layout manager, and this is one good reason to use a layout manager for a container that can change size.

Question 6: What is a Checkbox and how is it used?

Answer: A Checkbox is a component that has two possible states, "checked" and "unchecked". The user can change the state by clicking on the Checkbox. If box is a variable of type Checkbox, then a program can check the box by calling box.setState(true) and can uncheck the box by calling box.setState(false). The current state can be determined by calling box.getState(), which is a boolean-valued function. A Checkbox generates an event of type ItemEvent when it changes state. A program can listen for these events if it wants to take some action at the time the state changes.

Question 7: What is a thread?

Answer: A thread, like a program, executes a sequence of instructions from beginning to end. Several threads can execute "in parallel" at the same time. It is possible for threads to communicate by sharing variables. In Java, a thread is represented by an object of type Thread. A Thread object has a run() method to execute. It begins executing the run() routine when its start() method is called. At the same time, the rest of the program continues to execute in parallel with the thread.

Question 8: If you want to program an applet to show an animation, you have to create a thread. Why?

Answer: Unless it starts a thread, an applet can only respond to events that occur outside its control. We don't want the user to have to click on the applet to show each new frame of the animation! To do an animation, the applet can create a thread to show the frames continually, one after another.

Question 9: What is meant by a non-static nested class? What are the advantages of using one?

Answer: In Java, one class can be nested inside another. A nested class can be static or non-static. A non-static nested class is not actually part of the class that contains it. Instead, each object that belongs to the outer class has its own (logical) copy of the non-static nested class. Suppose that Outer is a class and Inner is a non-static nested class inside Outer. An object of type Inner can only be created through an object of type Outer. The Inner object has access to all the instance variables of the Outer object. This allows the two objects to communicate easily. But the objects are still distinct, and each one can have its own separate, well-defined responsibilities.

Question 10: What is the purpose of the Frame class?

Answer: An object belonging to the class Frame is an independent window on the screen. You don't need a Web browser to create a Frame like you do for an Applet. A Frame can be used as a user interface for a stand-alone program. It is also possible for an applet to open a Frame.

[ Chapter Index | Main Index ]