summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100187.html
blob: 7686c6d6fba67088d242a880b96f75c6be7fa73d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
<html>
<head>
<title>
Handbuch der Java-Programmierung, 5. Auflage
</title>
</head>
<body>
<a name="startofbody"></a>
<script language="JavaScript" src="hjp4lib.js">
</script>
<script language="JavaScript">
installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100184.html;106,k100186.html;107,k100188.html;108,k100192.html");
</script>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100184.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100186.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100188.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100192.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">Kapitel 29 - Low-Level-Events
</table>
<hr>


<!-- Section -->
<a name="sectlevel2id029003"></a>
<h2>29.3 <a name="ixa101965">Mouse-Events</a></h2>
<hr>
<ul>
<li><a href="k100187.html#sectlevel2id029003">29.3 Mouse-Events</a>
</ul>
<hr>

<p>
Ein Mouse-Event entsteht, wenn der Anwender innerhalb der Client-Area
des Fensters eine der Maustasten dr&uuml;ckt oder losl&auml;&szlig;t.
Dabei reagiert das Programm sowohl auf Klicks der linken als auch
- falls vorhanden - der rechten Maustaste und zeigt an, welche der
Umschalttasten <font color="#007700"><tt>[STRG]</tt></font>, <font color="#007700"><tt>[ALT]</tt></font>,
<font color="#007700"><tt>[UMSCHALT]</tt></font> oder <font color="#007700"><tt>[META]</tt></font>
w&auml;hrend des Mausklicks gedr&uuml;ckt waren. Des weiteren ist
es m&ouml;glich, zwischen einfachen und doppelten Mausklicks zu unterscheiden.

<p>
Ein Empf&auml;nger f&uuml;r Mouse-Events muss das Interface <a name="ixa101966"><a href="index_m.html#ixb101416"><font color=#000080><tt>MouseListener</tt></font></a></a>
implementieren und bekommt Events des Typs <a name="ixa101967"><a href="index_m.html#ixb101408"><font color=#000080><tt>MouseEvent</tt></font></a></a>
&uuml;bergeben. <a href="index_m.html#ixb101408"><font color=#000080><tt>MouseEvent</tt></font></a>
erweitert die Klasse <a href="index_i.html#ixb101414"><font color=#000080><tt>InputEvent</tt></font></a>
und stellt neben <a href="index_g.html#ixb101409"><font color=#000080><tt>getID</tt></font></a>
und <a href="index_g.html#ixb101401"><font color=#000080><tt>getSource</tt></font></a>
eine Reihe zus&auml;tzlicher Methoden zur Verf&uuml;gung, die wichtige
Informationen liefern. Die Registrierung der Empf&auml;ngerklasse
erfolgt mit der Methode <a href="index_a.html#ixb101422"><font color=#000080><tt>addMouseListener</tt></font></a>,
die in allen Klassen zur Verf&uuml;gung steht, die aus <a href="index_c.html#ixb101302"><font color=#000080><tt>Component</tt></font></a>
abgeleitet wurden: 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public void addMouseListener(MouseListener l)
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/awt/Component.html" onClick="this.href=getApiDoc('java.awt.Component')"><font color="#660066" size=-1>java.awt.Component</font></a></td>
</tr>
</table>

<p>
<a href="k100187.html#methodenmouselistener">Tabelle 29.3</a> gibt
eine &Uuml;bersicht der Methoden von <a href="index_m.html#ixb101416"><font color=#000080><tt>MouseListener</tt></font></a>
und erkl&auml;rt ihre Bedeutung: <a name="methodenmouselistener"></a>

<p>
<table cols=2 border width=100%>

<tr>
<td valign=top align=left width=25%><b>Ereignismethode</b></td>
<td valign=top align=left width=75%><b>Bedeutung </b></td></tr>
<tr>
<td valign=top align=left><a href="index_m.html#ixb101420"><font color=#000080><tt>mousePressed</tt></font></a></td>
<td valign=top align=left>Eine Maustaste wurde gedr&uuml;ckt. </td></tr>
<tr>
<td valign=top align=left><a href="index_m.html#ixb101421"><font color=#000080><tt>mouseReleased</tt></font></a></td>
<td valign=top align=left>Die gedr&uuml;ckte Maustaste wurde losgelassen.
</td></tr>
<tr>
<td valign=top align=left><a href="index_m.html#ixb101417"><font color=#000080><tt>mouseClicked</tt></font></a></td>
<td valign=top align=left>Eine Maustaste wurde gedr&uuml;ckt und wieder
losgelassen. Diese Methode wird nach <a href="index_m.html#ixb101421"><font color=#000080><tt>mouseReleased</tt></font></a>
aufgerufen. </td></tr>
<tr>
<td valign=top align=left><a href="index_m.html#ixb101418"><font color=#000080><tt>mouseEntered</tt></font></a></td>
<td valign=top align=left>Der Mauszeiger wurde in den Client-Bereich
der ausl&ouml;senden Komponente hineinbewegt. </td></tr>
<tr>
<td valign=top align=left><a href="index_m.html#ixb101419"><font color=#000080><tt>mouseExited</tt></font></a></td>
<td valign=top align=left>Der Mauszeiger wurde aus dem Client-Bereich
der ausl&ouml;senden Komponente herausbewegt. </td></tr>
</table>
<p><i>
Tabelle 29.3: Methoden von MouseListener </i></p>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Damit ein Programm auf Mausklicks angemessen reagieren kann, ben&ouml;tigt
es zus&auml;tzliche Informationen, die es sich mit den Methoden der
Klasse <a href="index_m.html#ixb101408"><font color=#000080><tt>MouseEvent</tt></font></a>
bzw. ihrer Vaterklasse <a href="index_i.html#ixb101414"><font color=#000080><tt>InputEvent</tt></font></a>
beschaffen kann. Zun&auml;chst kann mit <a name="ixa101968"><a href="index_g.html#ixb101511"><font color=#000080><tt>getX</tt></font></a></a>,
<a name="ixa101969"><a href="index_g.html#ixb101512"><font color=#000080><tt>getY</tt></font></a></a>
und <a name="ixa101970"><a href="index_g.html#ixb101513"><font color=#000080><tt>getPosition</tt></font></a></a>
die Position des Mauszeigers zum Zeitpunkt des Ereignisses ermittelt
werden:</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF">&nbsp;Hinweis&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public int getX()
public int getY()

public Point getPoint()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/awt/event/MouseEvent.html" onClick="this.href=getApiDoc('java.awt.event.MouseEvent')"><font color="#660066" size=-1>java.awt.event.MouseEvent</font></a></td>
</tr>
</table>

<p>
<a href="index_g.html#ixb101511"><font color=#000080><tt>getX</tt></font></a>
liefert die <i>x</i>- und <a href="index_g.html#ixb101512"><font color=#000080><tt>getY</tt></font></a>
die <i>y</i>-Koordinate des Punktes, an dem der Mauszeiger sich beim
Auftreten des Ereignisses befindet. <a href="index_g.html#ixb101411"><font color=#000080><tt>getPoint</tt></font></a>
liefert dieselbe Information zusammengefasst als <a name="ixa101971"><a href="index_p.html#ixb101514"><font color=#000080><tt>Point</tt></font></a></a>-Objekt.
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=1></td>
<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Die Koordinatenwerte werden relativ zum Ursprung der ausl&ouml;senden
Komponente angegeben. Bei einem Fenster des Typs <a href="index_f.html#ixb101144"><font color=#000080><tt>Frame</tt></font></a>
bedeutet dies, dass bei einem Klick in der oberen linken Ecke nicht
<font color="#000077"><tt>(0,0)</tt></font> zur&uuml;ckgegeben wird,
sondern <font color="#000077"><tt>(getInsets().left, getInsets().top)</tt></font>.
Dies stimmt mit dem Ursprung des Koordinatensystems &uuml;berein,
das auch beim Aufruf der Grafikroutinen zugrunde gelegt wird.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#0099CC">
<tr>
<td><font color="#FFFFFF">&nbsp;Tipp&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
</tr>
</table>

<p>
Des weiteren gibt es in <a href="index_m.html#ixb101408"><font color=#000080><tt>MouseEvent</tt></font></a>
die Methode <a href="index_i.html#ixb101515"><font color=#000080><tt>isPopupTrigger</tt></font></a>,
mit der abgefragt werden kann, ob das Klickereignis den Aufruf eines
Popup-Men&uuml;s anzeigen soll. Wir werden darauf in <a href="k100192.html#kapitelmenues">Kapitel 30</a>
zur&uuml;ckkommen. 

<p>
Die Methode <a name="ixa101972"><a href="index_g.html#ixb101516"><font color=#000080><tt>getClickCount</tt></font></a></a>
liefert die Anzahl der Mausklicks, die dem aktuellen Ereignis zugeordnet
ist: 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public int getClickCount()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/awt/event/MouseEvent.html" onClick="this.href=getApiDoc('java.awt.event.MouseEvent')"><font color="#660066" size=-1>java.awt.event.MouseEvent</font></a></td>
</tr>
</table>

<p>
Normalerweise hat dieser Z&auml;hler den Wert 1, bei Mehrfachklicks
gibt es aber auch <font color="#000077"><tt>MouseEvents</tt></font>
mit dem Wert 2 oder (je nach Schnelligkeit der Klicks) noch h&ouml;heren
Werten. Die Abfrage von <a href="index_g.html#ixb101516"><font color=#000080><tt>getClickCount</tt></font></a>
kann dazu verwendet werden, auf Doppelklicks zu reagieren. Hierzu
ist lediglich beim Aufruf von <a href="index_m.html#ixb101420"><font color=#000080><tt>mousePressed</tt></font></a>
oder <a href="index_m.html#ixb101417"><font color=#000080><tt>mouseClicked</tt></font></a>
zu &uuml;berpr&uuml;fen, ob <a href="index_g.html#ixb101516"><font color=#000080><tt>getClickCount</tt></font></a>
den Wert 2 liefert. In diesem Fall handelt es sich um einen Doppelklick.
Zu beachten ist, dass bei einem Doppelklick zwei aufeinanderfolgende
<a href="index_m.html#ixb101420"><font color=#000080><tt>mousePressed</tt></font></a>-<a href="index_m.html#ixb101421"><font color=#000080><tt>mouseReleased</tt></font></a>-<a href="index_m.html#ixb101417"><font color=#000080><tt>mouseClicked</tt></font></a>-Sequenzen
gesendet werden. In der ersten hat der Z&auml;hler den Wert 1, um
den ersten (einfachen) Mausklick zu signalisieren, und erst in der
zweiten steht er auf 2. Vor einem Doppelklick wird also immer erst
der zugeh&ouml;rige Einzelklick &uuml;bertragen. 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Eine alternative Methode, Doppelklicks zu erkennen, besteht darin,
die Zeitspanne zwischen zwei Klicks und den Abstand der beiden Koordinatenpaare
voneinander zu messen und bei hinreichend kleinen Differenzen einen
Doppelklick anstelle zweier Einfachklicks zu melden. Dazu wird mit
der Methode <a name="ixa101973"><a href="index_g.html#ixb101517"><font color=#000080><tt>getWhen</tt></font></a></a>
der Klasse <a href="index_i.html#ixb101414"><font color=#000080><tt>InputEvent</tt></font></a>
der Zeitpunkt (in Millisekunden) und mit <a href="index_g.html#ixb101411"><font color=#000080><tt>getPoint</tt></font></a>
oder <a href="index_g.html#ixb101511"><font color=#000080><tt>getX</tt></font></a>
und <a href="index_g.html#ixb101512"><font color=#000080><tt>getY</tt></font></a>
die Mausposition zweier aufeinanderfolgender Events bestimmt:</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF">&nbsp;Hinweis&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public long getWhen()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/awt/event/InputEvent.html" onClick="this.href=getApiDoc('java.awt.event.InputEvent')"><font color="#660066" size=-1>java.awt.event.InputEvent</font></a></td>
</tr>
</table>

<p>
Diese Vorgehensweise hat den Vorteil, dass die zeitliche und positionelle
Toleranz f&uuml;r Doppelklicks selbst beeinflusst werden kann, was
bei dem oben beschriebenen Standardverfahren nicht m&ouml;glich ist.

<p>
Neben den bisher besprochenen Methoden stehen die aus <a href="index_i.html#ixb101414"><font color=#000080><tt>InputEvent</tt></font></a>
geerbten Methoden zur Verf&uuml;gung. <a href="index_i.html#ixb101414"><font color=#000080><tt>InputEvent</tt></font></a>
ist die gemeinsame Basisklasse von <a href="index_m.html#ixb101408"><font color=#000080><tt>MouseEvent</tt></font></a>
und <a href="index_k.html#ixb101412"><font color=#000080><tt>KeyEvent</tt></font></a>
und stellt Methoden zur Verf&uuml;gung, die generelle Informationen
&uuml;ber den Zustand der Umschalttasten <font color="#007700"><tt>[STRG]</tt></font>,
<font color="#007700"><tt>[ALT]</tt></font>, <font color="#007700"><tt>[UMSCHALT]</tt></font>
oder <font color="#007700"><tt>[META]</tt></font> zum Zeitpunkt des
Ereignisses liefern: 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public boolean isShiftDown()
public boolean isControlDown()
public boolean isMetaDown()
public boolean isAltDown()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/awt/event/InputEvent.html" onClick="this.href=getApiDoc('java.awt.event.InputEvent')"><font color="#660066" size=-1>java.awt.event.InputEvent</font></a></td>
</tr>
</table>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
W&auml;hrend die Tasten <font color="#007700"><tt>[UMSCHALT]</tt></font>,
<font color="#007700"><tt>[STRG]</tt></font> und <font color="#007700"><tt>[ALT]</tt></font>
erwartungsgem&auml;&szlig; die zugeh&ouml;rigen Tasten erkennen, zeigt
<a href="index_i.html#ixb101518"><font color=#000080><tt>isMetaDown</tt></font></a>
unter Windows 95 an, ob der Klick von der rechten oder der linken
Maustaste stammt. Ist der R&uuml;ckgabewert <a href="index_t.html#ixb100233"><font color=#000080><tt>true</tt></font></a>,
so wurde die rechte Maustaste gedr&uuml;ckt, andernfalls die linke.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF">&nbsp;Hinweis&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>

<p>
Das folgende Programm ist ein einfaches Beispiel f&uuml;r die Reaktion
auf Mausklicks. Es zeichnet an den Stellen, wo die Maustaste gedr&uuml;ckt
wird, einen kleinen Smiley auf den Bildschirm: 
<a name="listingid029003"></a>

<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
<tr>
<td valign=top>
<font color="#000055">
<pre>
<font color="#555555">001 </font><font color="#00AA00">/* Listing2903.java */</font>
<font color="#555555">002 </font>
<font color="#555555">003 </font><font color="#0000AA">import</font> java.awt.*;
<font color="#555555">004 </font><font color="#0000AA">import</font> java.awt.event.*;
<font color="#555555">005 </font>
<font color="#555555">006 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing2903
<font color="#555555">007 </font><font color="#0000AA">extends</font> Frame
<font color="#555555">008 </font>{
<font color="#555555">009 </font>  <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
<font color="#555555">010 </font>  {
<font color="#555555">011 </font>    Listing2903 wnd = <font color="#0000AA">new</font> Listing2903();
<font color="#555555">012 </font>    wnd.setSize(300,200);
<font color="#555555">013 </font>    wnd.setLocation(200,100);
<font color="#555555">014 </font>    wnd.setVisible(<font color="#006699">true</font>);
<font color="#555555">015 </font>  }
<font color="#555555">016 </font>
<font color="#555555">017 </font>  <font color="#0000AA">public</font> Listing2903()
<font color="#555555">018 </font>  {
<font color="#555555">019 </font>    <font color="#006699">super</font>(<font color="#0000FF">"Mausklicks"</font>);
<font color="#555555">020 </font>    addWindowListener(<font color="#0000AA">new</font> WindowClosingAdapter(<font color="#006699">true</font>));
<font color="#555555">021 </font>    addMouseListener(<font color="#0000AA">new</font> MyMouseListener());
<font color="#555555">022 </font>  }
<font color="#555555">023 </font>
<font color="#555555">024 </font>  <font color="#0000AA">class</font> MyMouseListener
<font color="#555555">025 </font>  <font color="#0000AA">extends</font> MouseAdapter
<font color="#555555">026 </font>  {
<font color="#555555">027 </font>    <font color="#006699">int</font> cnt = 0;
<font color="#555555">028 </font>
<font color="#555555">029 </font>    <font color="#0000AA">public</font> <font color="#006699">void</font> mousePressed(MouseEvent event)
<font color="#555555">030 </font>    {
<font color="#555555">031 </font>      Graphics g = getGraphics();
<font color="#555555">032 </font>      <font color="#006699">int</font> x = event.getX();
<font color="#555555">033 </font>      <font color="#006699">int</font> y = event.getY();
<font color="#555555">034 </font>      <font color="#0000AA">if</font> (event.getClickCount() == 1) { <font color="#00AA00">//Gesicht</font>
<font color="#555555">035 </font>        ++cnt;
<font color="#555555">036 </font>        <font color="#00AA00">//Kopf und Augen</font>
<font color="#555555">037 </font>        g.drawOval(x-10,y-10,20,20);
<font color="#555555">038 </font>        g.fillRect(x-6,y-5,4,5);
<font color="#555555">039 </font>        g.fillRect(x+3,y-5,4,5);
<font color="#555555">040 </font>        <font color="#00AA00">//Mund</font>
<font color="#555555">041 </font>        <font color="#0000AA">if</font> (event.isMetaDown()) { <font color="#00AA00">//grimmig</font>
<font color="#555555">042 </font>           g.drawLine(x-5,y+7,x+5,y+7);
<font color="#555555">043 </font>        } <font color="#0000AA">else</font> {                  <font color="#00AA00">//l&auml;cheln</font>
<font color="#555555">044 </font>           g.drawArc(x-7,y-7,14,14,225,100);
<font color="#555555">045 </font>        }
<font color="#555555">046 </font>        <font color="#00AA00">//Z&auml;hler</font>
<font color="#555555">047 </font>        g.drawString(<font color="#0000FF">""</font>+cnt,x+10,y-10);
<font color="#555555">048 </font>      } <font color="#0000AA">else</font> <font color="#0000AA">if</font> (event.getClickCount() == 2) { <font color="#00AA00">//Brille</font>
<font color="#555555">049 </font>        g.drawLine(x-9,y-3,x+9,y-3);
<font color="#555555">050 </font>      }
<font color="#555555">051 </font>    }
<font color="#555555">052 </font>  }
<font color="#555555">053 </font>}</pre>
</font>
</td>
<td valign=top align=right>
<a href="../examples/Listing2903.java"><font color="#000055" size=-1>Listing2903.java</font></a></td>
</tr>
</table>
<i>
Listing 29.3: Reaktion auf Mausklicks</i></p>

<p>
Beim Dr&uuml;cken der linken Maustaste l&auml;chelt das Gesicht, bei
der rechten sieht es grimmig aus. Bei einem Doppelklick bekommt der
Smiley zus&auml;tzlich eine Brille aufgesetzt. Die Ausgabe des Programms
sieht beispielsweise so aus: 
<p>
<a name="imageid029002"></a>
<img src="images/MausKlicks.gif">
<p>

<p><i>
Abbildung 29.2: Die Ausgabe des Mausklick-Programms</i></p>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Erw&auml;hnenswert ist die Tatsache, dass das Programm ohne <a href="index_p.html#ixb101148"><font color=#000080><tt>paint</tt></font></a>-Methode
auskommt. Tats&auml;chlich beschafft die Methode <a href="index_m.html#ixb101420"><font color=#000080><tt>mousePressed</tt></font></a>
sich die zum Zeichnen erforderliche Instanz der Klasse <a href="index_g.html#ixb101149"><font color=#000080><tt>Graphics</tt></font></a>
durch Aufruf von <a href="index_g.html#ixb101294"><font color=#000080><tt>getGraphics</tt></font></a>
selbst. Die Methode <a href="index_g.html#ixb101294"><font color=#000080><tt>getGraphics</tt></font></a>
gibt immer den Grafikkontext des aktuellen Fensterobjekts zur&uuml;ck.
Das gelieferte <a href="index_g.html#ixb101149"><font color=#000080><tt>Graphics</tt></font></a>-Objekt
kann auf dieselbe Weise verwendet werden wie das als Parameter an
<a href="index_p.html#ixb101148"><font color=#000080><tt>paint</tt></font></a>
&uuml;bergebene.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF">&nbsp;Hinweis&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>

<p>
Leider hat das Beispielprogramm eine gravierende konzeptionelle Schw&auml;che,
denn die gezeichneten Smileys sind nicht <i>dauerhaft</i>. Wird das
Fenster in den Hintergrund gestellt, nachdem einige Mausklicks durchgef&uuml;hrt
wurden, sind bei erneuter Anzeige des Fensters die zuvor gezeichneten
Smileys wieder verschwunden. Der Grund daf&uuml;r ist, dass wir in
unserem Beispiel nicht die <a href="index_p.html#ixb101148"><font color=#000080><tt>paint</tt></font></a>-Methode
&uuml;berlagert haben, sondern die Ausgaben als direkte Reaktion auf
ein Mausereignis erledigten. Da Windows nicht daf&uuml;r sorgt, den
Inhalt eines zuvor verdeckten Fensters zu rekonstruieren, ist die
Anwendung selbst daf&uuml;r verantwortlich, dies in ihrer <a href="index_p.html#ixb101148"><font color=#000080><tt>paint</tt></font></a>-Methode
zu tun. Eine bessere Implementierung dieses Programms w&uuml;rde also
darin bestehen, die Koordinaten und Eigenschaften aller gezeichneten
Objekte zu speichern und sie beim Aufruf von <a href="index_p.html#ixb101148"><font color=#000080><tt>paint</tt></font></a>
sp&auml;ter selbst zu rekonstruieren. Wir werden diese Vorgehensweise
in einem sp&auml;teren Beispiel genauer kennenlernen. 
<hr>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
Wesley, Version 5.0.1
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100184.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100186.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100188.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100192.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">&copy; 1998, 2007 Guido Kr&uuml;ger &amp; Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>