giáo trình Java By Example phần 2 pdf

42 418 0
giáo trình Java By Example phần 2 pdf

Đ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

Chapter 25 Mouse and Keyboard Events CONTENTS The Event Object● The Mouse Handling Mouse Clicks❍ Example: Using Mouse Clicks in an Applet❍ Handling Mouse Movement❍ Example: Responding to Mouse Movement in an Applet❍ ● The Keyboard Responding to Key Presses❍ Predefined Key Constants❍ Key Modifiers❍ Example: Using Key Presses in an Applet❍ ● Handling Events Directly Example: Overriding handleEvent() in an Applet❍ ● Summary● Review Questions● Review Exercises● Up until now, your applets have responded to events generated by Java components like buttons, text fields, and list boxes. You've yet to examine how to respond to events generated by the most basic of a computer's controls, the mouse and the keyboard. Because virtually every computer has these important hardware controls, you can confidently take advantage of them in your applets to collect various types of input. In this chapter, you learn the secrets of mouse and keyboard handling in Java applets. The Event Object In order to understand how to respond to various types of events, you need to know more about Java's Event class, an object of which is passed to any event-handling method. When you want to respond to a Java button control, for example, you override the action() method, whose first argument is an Event object. You then examine the target field of the Event object to determine whether it was the http://www.ngohaianh.info button control that generated the event. The Event class, however, defines many constants and data fields that provide information about the event represented by the object. First, the Event class defines constants for all of the events to which an event-handling method can respond. In this chapter, you'll learn about some of these constants, which include MOUSE_DOWN, MOUSE_UP, and KEY_PRESS. The class also defines constants for special keys, such as f1, PGUP, PGDN, HOME, and so on. Finally, the Event class defines the data fields shown in Table 25.1. How you use these data fields depends on the type of event represented by the Event object. Table 25.1 Data Fields of the Event Class. Field Description Object arg Event-specific information. With a button event, for example, this field is the button's label. int clickCount The click count for mouse events. A value of 1 means a single click, and 2 means a double-click. int id The event's type, such as MOUSE_DOWN, MOUSE_MOVE, KEY_PRESS, etc. int key The key for a key-related event. For a KEY_PRESS event, for example, this would be the key that was pressed. int modifiers The key modifiers, including the shift and control keys. The Event class defines constants such as SHIFT_MASK and CTRL_MASK. Object target The type of object-such as Button, TextField, and so on-that generated the event. long when The event's time stamp. int x The X coordinate associated with the event, usually used with mouse events to indicate the mouse's position at the time of the event. int y The Y coordinate associated with the event, usually used with mouse events to indicate the mouse's position at the time of the event. The Mouse Most people use their computer's mouse darn near as much as its keyboard. I can vouch for this from first-hand experience, because my only bout with RSI (repetitive strain injury) came not from typing furiously all day, but from maneuvering my mouse to mark paragraphs, highlight words, click buttons, make list selections, bring up menus, and any number of other mousely tasks. I'm not looking for your sympathy, though. My point is that the mouse is one of the most important input devices attached to your computer. To write complete applets, you're going to have to master responding to mouse events in your Java programs. http://www.ngohaianh.info Luckily, responding to mouse input is a simple matter. Because responding to the events generated by the mouse are such an important and common task in modern programming, Java's classes already include special methods for responding to these events. Exactly what events are you expected to handle? A mouse generates six types of event messages that you can capture in your applets. These events are listed below, along with their descriptions and the method that handles them: MOUSE_DOWN-This event, which is handled by the mouseDown() method, is caused when the user presses the mouse button. ● MOUSE_UP-This event, which is handled by the mouseUp() method, is caused when the user releases the left mouse button. ● MOUSE_MOVE-This event, which is handled by the mouseMove() method, occurs when the user moves the mouse pointer on the screen. ● MOUSE_DRAG-This event, which is handled by the mouseDrag() method, is generated when the user moves the mouse pointer while holding down the left mouse button. ● MOUSE_ENTER-This event, which is handled by the mouseEnter() method, is sent when the mouse pointer enters the area owned by an applet or component. ● MOUSE_EXIT-This event, which is handled by the mouseExit() method, occurs when the mouse pointer leaves the area owned by an applet or a component. ● In the sections that follow, you'll learn more about the most commonly used of these mouse events. Handling Mouse Clicks Without a doubt, the most commonly used mouse event in Java programs (and any other program written for a graphical user interface) is the MOUSE_DOWN event, which is generated whenever the user clicks within an applet. It's the MOUSE_DOWN event, for example, that lets Java know when an on-screen button component has been clicked. You don't have to worry about clicks on on-screen buttons (usually), because they're handled by Java. However, you can respond to MOUSE_DOWN events in your applets in order to accomplish other input tasks. Java provides a couple of methods by which you can respond to mouse events. The easiest way to capture a MOUSE_DOWN event is to override the applet's mouseDown() method. Java automatically calls mouseDown() whenever the MOUSE_DOWN event is generated, which makes responding to this event easier than melting butter with a blowtorch. The mouseDown() method's signature looks like this: public boolean mouseDown(Event evt, int x, int y) The arguments passed to the function are an Event object and the X,Y coordinates of the mouse event. Although Java has already extracted the X,Y mouse coordinates for you, you can also get them from the Event object by examining the values stored in the x and y data fields, as described in Table 25.1. (Because Java has already extracted the coordinates for you, though, it makes more sense to use the x and y parameters sent to the function.) What you do with these coordinates depends, of course, on your applet. In the next section, you'll see how to use the coordinates to display graphics on the screen. http://www.ngohaianh.info NOTE Although most of Java's event-handling methods automatically receive as arguments the basic information you need about a specific event (such as the coordinates of a mouse click), you can extract whatever additional information you need from the Event object, which is always the first parameter in a message-handling method. Example: Using Mouse Clicks in an Applet As I was describing the mouseDown() method in the previous section, I felt an example coming on. And, sure enough, here it is. The applet in Listing 25.1 responds to mouse clicks by printing the word "Click!" wherever the user clicks in the applet. It does this by storing the coordinates of the mouse click in the applet's coordX and coordY data fields. The paint() method then uses these coordinates to display the word. Figure 25.1 shows MouseApplet running under Appletviewer. Figure 25.1 : The MouseApplet applet responds to mouse clicks. Listing 25.1 MouseApplet.java: Using Mouse Clicks in an Applet. import java.awt.*; import java.applet.*; public class MouseApplet extends Applet { int coordX, coordY; public void init() { coordX = -1; coordY = -1; http://www.ngohaianh.info Font font = new Font("TimesRoman", Font.BOLD, 24); setFont(font); resize(400, 300); } public void paint(Graphics g) { if (coordX != -1) g.drawString("Click!", coordX, coordY); } public boolean mouseDown(Event evt, int x, int y) { coordX = x; coordY = y; repaint(); return true; } } Tell Java that the applet uses the classes in the awt package. Tell Java that the applet uses the classes in the applet package. http://www.ngohaianh.info Derive the MouseApplet class from Java's Applet class. Declare the class's data fields. Override the init() method. Initialize the click coordinates. Create and set the font for the applet. Size the applet. Override the paint() method. If the user has selected a coordinate Draw the word Click! at the selected coordinate. Override the mouseDown() method. Save the mouse click's coordinates. Force Java to repaint the applet. Tell Java that the event was handled. NOTE When you run MouseApplet, you'll discover that the applet window gets erased each time the paint() method is called. That's why only one "Click!" ever appears in the window. Handling Mouse Movement Although mouse clicks are the most common type of mouse event to which your applet may want to respond, tracking the mouse pointer's movement can also be useful. Drawing programs, for example, enable you to draw shapes by tracking the movement of the mouse and displaying the results on the screen. Unlike mouse clicks, though, which are rare, only occurring when the user presses a mouse button, MOUSE_MOVE events come flooding into your applet by the hundreds as the user moves the mouse around the screen. Each one of these events can be handled in the mouseMove() method, whose signature looks like this: public boolean mouseMove(Event evt, int x, int y) Yep. Except for its name, the mouseMove() method looks exactly like the mouseDown() method, receiving as arguments an Event object and the X,Y coordinates at which the event occurred. Example: Responding to Mouse Movement in an Applet Responding to mouse movement isn't something you have to do often in your applets. Still, it's a handy tool to have on your belt. You might, for example, need to track mouse movement when writing a game applet that uses the mouse as input. A more common use is in graphics programs that enable you to draw on the screen. Listing 25.2 is just such an applet. When you run MouseApplet2 with Appletviewer, you see a blank window. Click the mouse in the http://www.ngohaianh.info window to choose a starting point and then move the mouse around the window. Wherever the mouse pointer goes, it leaves a black line behind (Figure 25.2). Although this is a very simple drawing program, it gives you some idea of how you might use a mouse to accomplish other similar tasks. Figure 25.2 : This applet draws by tracking the movement of the mouse. Listing 25.2 MouseApplet2.java: An Applet That Tracks Mouse Movement. import java.awt.*; import java.applet.*; public class MouseApplet2 extends Applet { Point startPoint; Point points[]; int numPoints; boolean drawing; public void init() { startPoint = new Point(0, 0); points = new Point[1000]; numPoints = 0; drawing = false; resize(400, 300); } http://www.ngohaianh.info public void paint(Graphics g) { int oldX = startPoint.x; int oldY = startPoint.y; for (int x=0; x<numPoints; ++x) { g.drawLine(oldX, oldY, points[x].x, points[x].y); oldX = points[x].x; oldY = points[x].y; } } public boolean mouseDown(Event evt, int x, int y) { drawing = true; startPoint.x = x; startPoint.y = y; return true; } public boolean mouseMove(Event evt, int x, int y) http://www.ngohaianh.info { if ((drawing) && (numPoints < 1000)) { points[numPoints] = new Point(x, y); ++numPoints; repaint(); } return true; } } 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 MouseApplet2 class from Java's Applet class. Declare the class's data fields. Override the init() method. Initialize the starting point. Create an array for storing the coordinates of line segments. Create and set the font for the applet. Set point count to zero. Set drawing flag off. Size the applet. Override the paint() method. Initialize the drawing's starting point. Cycle through each element in the points[] array. Draw a line segment. Save ending point as the starting point for the next line. Override the mouseDown() method. Set the flag in order to allow drawing to begin. Save the mouse click's coordinates. Tell Java that the event was handled. Override the mouseMove() method. if it's okay to add another line segment http://www.ngohaianh.info Create a new point and save the mouse's coordinates. Increment the point counter. Force Java to repaint the applet. Tell Java that the event was handled. The Keyboard The keyboard has been around even longer than the mouse and has been the primary interface between humans and their computers for decades. Given the keyboard's importance, obviously there may be times when you'll want to handle the keyboard events at a lower level than you can with something like a TextField control. Java responds to two basic key events, which are represented by the KEY_PRESS and KEY_RELEASE constants. As you'll soon see, Java defines methods that make it just as easy to respond to the keyboard as it is to respond to the mouse. Responding to Key Presses Whenever the user presses a key when an applet is active, Java sends the applet a KEY_PRESS event. In your applet, you can respond to this event by overriding the keyDown() method, whose signature looks like this: public boolean keyDown(Event evt, int key) As you can see, this method receives two arguments, which are an Event object and an integer representing the key that was pressed. This integer is actually the ASCII representation of the character represented by the key. In order to use this value in your programs, however, you must first cast it to a char value, like this: char c = (char)key; Predefined Key Constants Some of the keys on your keyboard issue commands rather than generate characters. These keys include all the F keys, as well as keys like Shift, Ctrl, Page Up, Page Down, and so on. In order to make these types of keys easier to handle in your applets, Java's Event class defines a set of constants that represent these key's values. Table 25.2 lists these constants. Table 25.2 Key Constants of the Event Class. Constant Key DOWN The down arrow key. END The End key. http://www.ngohaianh.info [...]... FrameApplet2, that gives the frame window its own class This new frame window also takes advantage of having its own class by overriding the paint( ) method in order to display text in the window Figure 23 .2 shows FrameApplet2 running under Appletviewer Figure 23 .2 : This is FrameApplet2 running under Appletviewer Listing 23 .2 FrameApplet2 .java: Creating a Frame-Window Class import java. awt.*; import java. applet.*;... find the solution to this exercise in the CHAP24 folder of this book's CD-ROM.) Figure 24 .2 : This is the DialogApplet2 applet run-ning under Appletviewer http://www.ngohaianh.info http://www.ngohaianh.info Chapter 23 Windows and Menu Bars CONTENTS q Displaying a Window r r Example: Creating a Window Class r q Example: Displaying a Window in an Applet Example: Adding Components to a Window Using Menu... the applet removes the window from the screen Figure 23 .1 shows the applet and its frame window Notice that, when the button is clicked, the button's label switches between "Show Window" and "Hide Window." Figure 23 .1 : Your Java applets can display additional windows Listing 23 .1 FrameApplet .java: Displaying a Frame Window import java. awt.*; import java. applet.*; public class FrameApplet extends Applet... false whenever you ignore a message, so that Java knows that it should pass the event on up the object hierarchy Listing 25 .5 is a rewritten version of the MouseApplet2 applet, called MouseApplet3 This version overrides the handleEvent() method in order to respond to events Listing 25 .5 MouseApplet3 .java: Using the handleEvent( ) Method import java. awt.*; import java. applet.*; public class MouseApplet3... has the focus and will receive the key presses Listing 25 .3 KeyApplet .java: An Applet That Captures Key Presses import java. awt.*; import java. applet.*; public class KeyApplet extends Applet { int keyPressed; public void init() { keyPressed = -1; Font font = new Font("TimesRoman", Font.BOLD, 144); setFont(font); http://www.ngohaianh.info resize (20 0, 20 0); } public void paint(Graphics g) { String str =... dialog box, the text you entered into the text field control appears in the frame window Figure 24 .1 shows the applet, the frame window, and the dialog box Figure 24 .1 : This is DialogApplet running under Appletviewer Listing 24 .1 DialogApplet .java: An Applet That Displays a Dialog Box import java. awt.*; import java. applet.*; public class DialogApplet extends Applet { DialogFrame frame; http://www.ngohaianh.info... controls 2 Write an applet that can display a dialog box with a 2 2 grid containing four buttons 3 Modify DialogApplet so that the dialog box has both an OK and a Cancel button If the user clicks the Cancel button, the dialog should be removed from the screen, but the string that was entered into the text field control should be ignored Figure 24 .2 shows the resultant applet, called DialogApplet2 (You... For example, if you wanted to check for the Alt key, you might use a line of Java code like this: boolean altPressed = (evt.modifiers & Event.ALT_MASK) != 0; By ANDing the mask with the value in the modifiers field, you end up with a non-zero value if the Alt key was pressed and a 0 if it wasn't You convert this result to a boolean value by comparing the result with 0 http://www.ngohaianh.info Example: ... important that you know how to handle these devices in your applets Maybe most of your applets will work fine by leaving such details up to Java or maybe you'll want to have more control over the devices than the default behavior allows You can capture most messages received by a Java applet by overloading the appropriate event handlers, such as mouseDown() and keyDown() However, if you want to step... When you have the window created, you can display it by calling the window's show( ) method To remove the window from the screen, you call the hide( ) method You can even size the window by calling resize( ) or position the window by calling move( ) Example: Displaying a Window in an Applet To demonstrate the basics of using the Frame class, Listing 23 .1 is the source code for an applet that can display . the movement of the mouse. Listing 25 .2 MouseApplet2 .java: An Applet That Tracks Mouse Movement. import java. awt.*; import java. applet.*; public class MouseApplet2 extends Applet { Point startPoint; . (Figure 25 .2) . Although this is a very simple drawing program, it gives you some idea of how you might use a mouse to accomplish other similar tasks. Figure 25 .2 : This applet draws by tracking. Figure 25 .1 shows MouseApplet running under Appletviewer. Figure 25 .1 : The MouseApplet applet responds to mouse clicks. Listing 25 .1 MouseApplet .java: Using Mouse Clicks in an Applet. import java. awt.*; import

Ngày đăng: 22/07/2014, 16:21

Từ khóa liên quan

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

Tài liệu liên quan