summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100187.html
diff options
context:
space:
mode:
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100187.html')
-rw-r--r--Master/Reference Architectures and Patterns/hjp5/html/k100187.html492
1 files changed, 492 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100187.html b/Master/Reference Architectures and Patterns/hjp5/html/k100187.html
new file mode 100644
index 0000000..7686c6d
--- /dev/null
+++ b/Master/Reference Architectures and Patterns/hjp5/html/k100187.html
@@ -0,0 +1,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>