> ### Sample Quiz Answers
> For Chapter 6

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

> Question 1: Programs written for a graphical user interface have to deal with "events." Explain what is meant by the term event. Give at least two different examples of events, and discuss how a program might respond to those events.

> Answer: An event is anything that can occur asynchronously, not under the control of the program, to which the program might want to respond. GUI programs are said to be "event-driven" because for the most part, such programs simply wait for events and respond to them when they occur. In many (but not all) cases, an event is the result of a user action, such as when the user clicks the mouse button, types a character, or clicks a button. The program might respond to a mouse-click on a canvas by drawing a shape, to a typed character by adding the character to an input box, or to a click on a button by clearing a drawing. More generally, a programmer can set up any desired response to an event by writing an event-handling routine for that event.

> Question 2: What is an event loop?

> Answer: An event-driven program doesn't have a `main()` routine that says what will happen from beginning to end, in a step-by-step fashion. Instead, the program runs in a loop that says:

>             while the program is still running:
>                 Wait for the next event
>                 Process the event

> This is called an event loop. In Java, the event loop is executed by the system. The system waits for events to happen. When an event occurs, the system calls a routine that has been designated to handle events of that type.

> Question 3: Explain carefully what the `repaint()` method does.

> Answer: The `repaint()` method is called to notify the system that the applet (or other component for which it is called) needs to be redrawn. It does not itself do any drawing (neither directly nor by calling a `paint()` or `paintComponent()` routine). You should call `repaint()` when you have made some change to the state of the applet that requires its appearance to change. Sometime shortly after you call it, the system will call the applet's `paint()` routine or the component's `paintComponent()` routine.

> Question 4: What is HTML?

> Answer: HTML, or HyperText Markup Language, is a language that is used for writing Web pages. A HTML document contains all the text on a Web page, "marked up" with "tags" that determine how the text looks -- its size and color and how it is broken into paragraphs, for example. Other tags can include things like horizontal lines, images, links, and applets on the page. A Web browser acts as an interpreter for the HTML language.

> Question 5: Draw the picture that will be produced by the following `paint()` method:

>                  public static void paint(Graphics g) {
>                     for (int i=10; i <= 210; i = i + 50)
>                        for (int j = 10; j <= 210; j = j + 50)
>                           g.drawLine(i,10,j,60);
>                  }

> Answer: The outer loop is executed for values of `i` equal to 10, 60, 110, 160, and 210. For each of these values, the inner loop is executed for `j` equal to 10, 60, 110, 160, and 210. The `drawLine` command is therefore executed 25 times -- and so, 25 different lines are drawn. These lines connect the five points (10,10), (60,10), (110,10), (160,10), and (210,10) to the five points (10,60), (60,60), (110,60), (160,60), and (210,60) in all possible pairings. Here is the picture:

> Question 6: Suppose you would like an applet that displays a green square inside a red circle, as illustrated. Write a `paint()` method that will draw the image.

> Answer:(The size of the square and circle are not specified in the problem, so any size would be acceptable, as long as the square is in the middle of the circle. Notice that the drawing commands are `fillOval` and `fillRect`. There are no special routines for drawing circles or squares.)

>                 public void paint(Graphics g) {
>                    g.setColor(Color.red);
>                    g.fillOval(10,10,80,80);
>                    g.setColor(Color.green);
>                    g.fillRect(30,30,40,40);
>                 }

> Question 7: Suppose that you are writing an applet, and you want the applet to respond in some way when the user clicks the mouse on the applet. What are the four things you need to remember to put into the source code of your applet?

> Answer: (1) Since the event and listener classes are defined in the `java.awt.event` package, you have to put "`import java.awt.event.*;`" at the beginning of the source code, before the class definition.

> (2) The applet class must be declared to implement the `MouseListener` interface, by adding the words "`implements MouseListener`" to the heading. For example: "`public class MyApplet extends JApplet implements MouseListener`". (It is also possible for another object besides the applet to listen for the mouse events.)

> (3) The class must include definitions for each of the five methods specified in the `MouseListener` interface. Even if a method is not going to do anything, it has to be defined, with an empty body.

> (4) The applet (or other listening object) must be registered to listen for mouse events by calling `addMouseListener()`. This is usually done in the `init()` method of the applet.

> Question 8: Java has a standard class called `MouseEvent`. What is the purpose of this class? What does an object of type `MouseEvent` do?

> Answer: When an event occurs, the system packages information about the event into an object. That object is passed as a parameter to the event-handling routine. Different types of events are represented by different classes of objects. An object of type `MouseEvent` represents a mouse or mouse motion event. It contains information about the location of the mouse cursor and any modifier keys that the user is holding down. This information can be obtained by calling the instance methods of the object. For example, if `evt` is a `MouseEvent` object, then `evt.getX()` is the `x`-coordinate of the mouse cursor, and `evt.isShiftDown()` is a boolean value that tells you whether the user was holding down the Shift key.

> Question 9: Explain what is meant by input focus. How is the input focus managed in a Java GUI program?

> Answer: When the user uses the keyboard, the events that are generated are directed to some component. At a given time, there is just one component that can get keyboard events. That component is said to have the input focus. Usually, the appearance of a component changes if it has the input focus and wants to receive user input from the keyboard. For example, there might be a blinking text cursor in the component, or the component might be hilited with a colored border. In order to change its appearance in this way, the component needs to be notified when it gains or loses the focus. In Java, a component gets this notification by listening for focus events.

> Some components, including applets and canvasses, do not get the input focus unless they request it by calling `requestFocus()`. If one of these components needs to process keyboard events, it should also listen for mouse events and call `requestFocus()` when the user clicks on the component. (Unfortunately, this rule is not enforced uniformly on all platforms.)

> Question 10: Java has a standard class called `JPanel`. Discuss two ways in which JPanels can be used.

> Answer: A JPanel is a type of component. That is, it is a visible element of a GUI. By itself, a JPanel is simply a blank rectangular region on the screen. However, a JPanel is a "container", which means that other components can be added to it and will then appear on the screen inside the JPanel. A JPanel can also be used as a drawing surface. In order to do this, it is necessary to create a subclass of `JPanel` and define a `paintComponent()` method in that subclass. An object belonging to that subclass can then be added to an applet or other component. The `paintComponent()` method defines how that object will draw itself on the screen.

[ Chapter Index | Main Index ]