diff options
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100187.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100187.html | 492 |
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"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100184.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100186.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100188.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100192.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </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ückt oder losläß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ährend des Mausklicks gedrückt waren. Des weiteren ist
+es möglich, zwischen einfachen und doppelten Mausklicks zu unterscheiden.
+
+<p>
+Ein Empfänger fü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>
+ü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ätzlicher Methoden zur Verfügung, die wichtige
+Informationen liefern. Die Registrierung der Empfä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ü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 Übersicht der Methoden von <a href="index_m.html#ixb101416"><font color=#000080><tt>MouseListener</tt></font></a>
+und erklä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ü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ü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ü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ö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ö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ötigt
+es zusä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ä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"> Hinweis </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ö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ückgegeben wird,
+sondern <font color="#000077"><tt>(getInsets().left, getInsets().top)</tt></font>.
+Dies stimmt mit dem Ursprung des Koordinatensystems ü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"> Tipp </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üs anzeigen soll. Wir werden darauf in <a href="k100192.html#kapitelmenues">Kapitel 30</a>
+zurü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ä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ö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 überprü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ä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örige Einzelklick ü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"> Hinweis </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ür Doppelklicks selbst beeinflusst werden kann, was
+bei dem oben beschriebenen Standardverfahren nicht mö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ü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ügung, die generelle Informationen
+ü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ä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äß die zugehö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ückgabewert <a href="index_t.html#ixb100233"><font color=#000080><tt>true</tt></font></a>,
+so wurde die rechte Maustaste gedrü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"> Hinweis </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ür die Reaktion
+auf Mausklicks. Es zeichnet an den Stellen, wo die Maustaste gedrü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ä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ä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ücken der linken Maustaste lächelt das Gesicht, bei
+der rechten sieht es grimmig aus. Bei einem Doppelklick bekommt der
+Smiley zusä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ä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ä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ü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>
+ü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"> Hinweis </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äche,
+denn die gezeichneten Smileys sind nicht <i>dauerhaft</i>. Wird das
+Fenster in den Hintergrund gestellt, nachdem einige Mausklicks durchgeführt
+wurden, sind bei erneuter Anzeige des Fensters die zuvor gezeichneten
+Smileys wieder verschwunden. Der Grund dafür ist, dass wir in
+unserem Beispiel nicht die <a href="index_p.html#ixb101148"><font color=#000080><tt>paint</tt></font></a>-Methode
+überlagert haben, sondern die Ausgaben als direkte Reaktion auf
+ein Mausereignis erledigten. Da Windows nicht dafür sorgt, den
+Inhalt eines zuvor verdeckten Fensters zu rekonstruieren, ist die
+Anwendung selbst dafü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ü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äter selbst zu rekonstruieren. Wir werden diese Vorgehensweise
+in einem spä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"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </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"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100186.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100188.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100192.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">© 1998, 2007 Guido Krüger & Thomas
+Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
+</table>
+<a name="endofbody"></a>
+</body>
+</html>
|
