diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Master/Reference Architectures and Patterns/hjp5/html/k100196.html | |
| download | Studium-master.tar.gz Studium-master.tar.bz2 | |
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100196.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100196.html | 720 |
1 files changed, 720 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100196.html b/Master/Reference Architectures and Patterns/hjp5/html/k100196.html new file mode 100644 index 0000000..d71784c --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100196.html @@ -0,0 +1,720 @@ +<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,k100192.html;106,k100195.html;107,k100197.html;108,k100201.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="k100192.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100195.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100197.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100201.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 30 - Menüs
+</table>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel2id030004"></a>
+<h2>30.4 <a name="ixa102038">Menüeinträge</a></h2>
+<hr>
+<ul>
+<li><a href="k100196.html#sectlevel2id030004">30.4 Menüeinträge</a>
+<ul>
+<li><a href="k100196.html#sectlevel3id030004001">30.4.1 Einfache Menüeinträge</a>
+<li><a href="k100196.html#sectlevel3id030004002">30.4.2 CheckboxMenuItem</a>
+<li><a href="k100196.html#sectlevel3id030004003">30.4.3 Beschleunigertasten</a>
+<li><a href="k100196.html#sectlevel3id030004004">30.4.4 Untermenüs</a>
+</ul>
+</ul>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel3id030004001"></a>
+<h3>30.4.1 Einfache Menüeinträge </h3>
+
+<p>
+Die <i>Menüeinträge</i> sind die elementaren Bestandteile
+eines Menüs. Sie besitzen einen Text, mit dem sie dem Anwender
+die dahinterstehende Funktion anzeigen. Wenn der zugehörige Menüpunkt
+aufgerufen wird, sendet das Programm eine Nachricht an das zugehörige
+Fenster, die dann zum Aufruf der entsprechenden Methode führt.
+
+<p>
+Menüeinträge werden in Java mit der Klasse <a name="ixa102039"><a href="index_m.html#ixb101472"><font color=#000080><tt>MenuItem</tt></font></a></a>
+erzeugt. Ihr Konstruktor erwartet als Parameter einen <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>,
+der den Namen des Menüeintrags angibt:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public MenuItem(String label)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/awt/MenuItem.html" onClick="this.href=getApiDoc('java.awt.MenuItem')"><font color="#660066" size=-1>java.awt.MenuItem</font></a></td>
+</tr>
+</table>
+
+<p>
+Auch nach der Konstruktion eines Menüeintrags ist ein Zugriff
+auf seinen Namen möglich. Mit der Methode <a name="ixa102040"><a href="index_g.html#ixb101563"><font color=#000080><tt>getLabel</tt></font></a></a>
+kann der Name des Menüeintrags abgefragt und mit <a name="ixa102041"><a href="index_s.html#ixb101564"><font color=#000080><tt>setLabel</tt></font></a></a>
+sogar verändert werden:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public String getLabel()
+
+public void setLabel(String label)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/awt/MenuItem.html" onClick="this.href=getApiDoc('java.awt.MenuItem')"><font color="#660066" size=-1>java.awt.MenuItem</font></a></td>
+</tr>
+</table>
+
+<p>
+Neben einem Namen besitzt ein Menüeintrag eine interne Zustandsvariable,
+die anzeigt, ob er <i>aktiv</i> ist oder nicht. Nur ein aktiver Eintrag
+kann vom Anwender ausgewählt werden und so eine Nachricht auslösen.
+Ein inaktiver Eintrag dagegen wird im Menü grau dargestellt,
+kann vom Anwender nicht mehr ausgewählt werden und daher auch
+keine Nachricht mehr auslösen.
+
+<p>
+Nach dem Aufruf des Konstruktors ist ein Menüeintrag zunächst
+aktiviert. Er kann durch Aufruf von <a name="ixa102042"><a href="index_s.html#ixb101359"><font color=#000080><tt>setEnabled(false)</tt></font></a></a>
+deaktiviert und mit <a href="index_s.html#ixb101359"><font color=#000080><tt>setEnabled(true)</tt></font></a>
+aktiviert werden. Durch Aufruf von <a name="ixa102043"><a href="index_i.html#ixb101360"><font color=#000080><tt>isEnabled</tt></font></a></a>
+kann der aktuelle Zustand abgefragt werden:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public void setEnabled(boolean b)
+
+public boolean isEnabled()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/awt/MenuItem.html" onClick="this.href=getApiDoc('java.awt.MenuItem')"><font color="#660066" size=-1>java.awt.MenuItem</font></a></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel3id030004002"></a>
+<h3>30.4.2 CheckboxMenuItem </h3>
+
+<p>
+Neben der Klasse <a href="index_m.html#ixb101472"><font color=#000080><tt>MenuItem</tt></font></a>
+gibt es mit der Klasse <a name="ixa102044"><a href="index_c.html#ixb101485"><font color=#000080><tt>CheckboxMenuItem</tt></font></a></a>
+eine zweite Klasse zum Erzeugen von Menüeinträgen. <a href="index_c.html#ixb101485"><font color=#000080><tt>CheckboxMenuItem</tt></font></a>
+ist aus <a href="index_m.html#ixb101472"><font color=#000080><tt>MenuItem</tt></font></a>
+abgeleitet und bietet als zusätzliches Feature eine interne Zustandsvariable,
+die zwischen <a href="index_t.html#ixb100233"><font color=#000080><tt>true</tt></font></a>
+und <a href="index_f.html#ixb100234"><font color=#000080><tt>false</tt></font></a>
+umgeschaltet werden kann. Die visuelle Darstellung der Zustandsvariablen
+erfolgt durch Anfügen oder Entfernen eines Häkchens neben
+dem Menüeintrag. Der Nutzen der Klasse <a href="index_c.html#ixb101485"><font color=#000080><tt>CheckboxMenuItem</tt></font></a>
+besteht darin, dass eine logische Programmvariable durch Auswählen
+des Menüpunkts abwechselnd an- und ausgeschaltet werden kann.
+
+<p>
+Die Instanzierung eines <a href="index_c.html#ixb101485"><font color=#000080><tt>CheckboxMenuItem</tt></font></a>
+erfolgt wie bei einem <a href="index_m.html#ixb101472"><font color=#000080><tt>MenuItem</tt></font></a>.
+Zusätzlich stehen die beiden Methoden <a name="ixa102045"><a href="index_s.html#ixb101363"><font color=#000080><tt>setState</tt></font></a></a>
+und <a name="ixa102046"><a href="index_g.html#ixb101364"><font color=#000080><tt>getState</tt></font></a></a>
+zum Setzen und Abfragen des Zustands zur Verfügung:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public void setState(boolean state)
+
+public boolean getState()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/awt/CheckboxMenuItem.html" onClick="this.href=getApiDoc('java.awt.CheckboxMenuItem')"><font color="#660066" size=-1>java.awt.CheckboxMenuItem</font></a></td>
+</tr>
+</table>
+
+<p>
+Das folgende Programm stellt alle bisher erwähnten Eigenschaften
+in einem Beispiel dar. Es leitet dazu die Klasse <font color="#000077"><tt>MainMenu1</tt></font>
+aus <a href="index_m.html#ixb101552"><font color=#000080><tt>MenuBar</tt></font></a>
+ab und erzeugt im Konstruktor die Menüs und Menüeinträge.
+Gegenüber der einfachen Instanzierung von <a href="index_m.html#ixb101552"><font color=#000080><tt>MenuBar</tt></font></a>
+bietet die Ableitung den Vorteil, dass die neue Klasse Methoden zur
+Verfügung stellen kann, die zum Zugriff auf Menüs oder Menüeinträge
+verwendet werden können.
+<a name="listingid030001"></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">/* Listing3001.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">class</font> MainMenu1
+<font color="#555555">007 </font><font color="#0000AA">extends</font> MenuBar
+<font color="#555555">008 </font>{
+<font color="#555555">009 </font> <font color="#0000AA">private</font> MenuItem miRueck;
+<font color="#555555">010 </font> <font color="#0000AA">private</font> CheckboxMenuItem miFarbe;
+<font color="#555555">011 </font>
+<font color="#555555">012 </font> <font color="#0000AA">public</font> MainMenu1()
+<font color="#555555">013 </font> {
+<font color="#555555">014 </font> Menu m;
+<font color="#555555">015 </font>
+<font color="#555555">016 </font> <font color="#00AA00">//Datei</font>
+<font color="#555555">017 </font> m = <font color="#0000AA">new</font> Menu(<font color="#0000FF">"Datei"</font>);
+<font color="#555555">018 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Neu"</font>));
+<font color="#555555">019 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Laden"</font>));
+<font color="#555555">020 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Speichern"</font>));
+<font color="#555555">021 </font> m.addSeparator();
+<font color="#555555">022 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Beenden"</font>));
+<font color="#555555">023 </font> add(m);
+<font color="#555555">024 </font> <font color="#00AA00">//Bearbeiten</font>
+<font color="#555555">025 </font> m = <font color="#0000AA">new</font> Menu(<font color="#0000FF">"Bearbeiten"</font>);
+<font color="#555555">026 </font> m.add((miRueck = <font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Rueckgaengig"</font>)));
+<font color="#555555">027 </font> m.addSeparator();
+<font color="#555555">028 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Ausschneiden"</font>));
+<font color="#555555">029 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Kopieren"</font>));
+<font color="#555555">030 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Einfuegen"</font>));
+<font color="#555555">031 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Loeschen"</font>));
+<font color="#555555">032 </font> add(m);
+<font color="#555555">033 </font> <font color="#00AA00">//Optionen</font>
+<font color="#555555">034 </font> m = <font color="#0000AA">new</font> Menu(<font color="#0000FF">"Optionen"</font>);
+<font color="#555555">035 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Einstellungen"</font>));
+<font color="#555555">036 </font> m.add((miFarbe = <font color="#0000AA">new</font> CheckboxMenuItem(<font color="#0000FF">"Farbe"</font>)));
+<font color="#555555">037 </font> add(m);
+<font color="#555555">038 </font> <font color="#00AA00">//Rueckgaengig deaktivieren</font>
+<font color="#555555">039 </font> enableRueckgaengig(<font color="#006699">false</font>);
+<font color="#555555">040 </font> <font color="#00AA00">//Farbe anschalten</font>
+<font color="#555555">041 </font> setFarbe(<font color="#006699">true</font>);
+<font color="#555555">042 </font> }
+<font color="#555555">043 </font>
+<font color="#555555">044 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> enableRueckgaengig(<font color="#006699">boolean</font> ena)
+<font color="#555555">045 </font> {
+<font color="#555555">046 </font> <font color="#0000AA">if</font> (ena) {
+<font color="#555555">047 </font> miRueck.setEnabled(<font color="#006699">true</font>);
+<font color="#555555">048 </font> } <font color="#0000AA">else</font> {
+<font color="#555555">049 </font> miRueck.setEnabled(<font color="#006699">false</font>);
+<font color="#555555">050 </font> }
+<font color="#555555">051 </font> }
+<font color="#555555">052 </font>
+<font color="#555555">053 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> setFarbe(<font color="#006699">boolean</font> on)
+<font color="#555555">054 </font> {
+<font color="#555555">055 </font> miFarbe.setState(on);
+<font color="#555555">056 </font> }
+<font color="#555555">057 </font>}
+<font color="#555555">058 </font>
+<font color="#555555">059 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing3001
+<font color="#555555">060 </font><font color="#0000AA">extends</font> Frame
+<font color="#555555">061 </font>{
+<font color="#555555">062 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">063 </font> {
+<font color="#555555">064 </font> Listing3001 wnd = <font color="#0000AA">new</font> Listing3001();
+<font color="#555555">065 </font> }
+<font color="#555555">066 </font>
+<font color="#555555">067 </font> <font color="#0000AA">public</font> Listing3001()
+<font color="#555555">068 </font> {
+<font color="#555555">069 </font> <font color="#006699">super</font>(<font color="#0000FF">"Menüs"</font>);
+<font color="#555555">070 </font> setLocation(100,100);
+<font color="#555555">071 </font> setSize(400,300);
+<font color="#555555">072 </font> setMenuBar(<font color="#0000AA">new</font> MainMenu1());
+<font color="#555555">073 </font> setVisible(<font color="#006699">true</font>);
+<font color="#555555">074 </font> addWindowListener(<font color="#0000AA">new</font> WindowClosingAdapter(<font color="#006699">true</font>));
+<font color="#555555">075 </font> }
+<font color="#555555">076 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing3001.java"><font color="#000055" size=-1>Listing3001.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 30.1: Erzeugen von Menüs</i></p>
+
+<p>
+Das Programm erzeugt eine Menüzeile mit den drei Einträgen
+»Datei«, »Bearbeiten« und »Optionen«,
+die in <a href="k100196.html#erzeugenmenues">Abbildung 30.1</a> dargestellt
+werden:
+<p>
+<a name="erzeugenmenues"></a>
+<img src="images/Menues.gif">
+<p>
+
+<p><i>
+Abbildung 30.1: Erzeugen von Menüs</i></p>
+
+
+<!-- Section -->
+<a name="sectlevel3id030004003"></a>
+<h3>30.4.3 <a name="ixa102047">Beschleunigertasten</a></h3>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+In den meisten Programmen lassen sich Menüs nicht nur mit der
+Maus bedienen, sondern über <i>Beschleunigertasten</i> auch mit
+der Tastatur. Im JDK 1.0 konnten Beschleunigertasten unter Windows
+95 ganz einfach dadurch eingefügt werden, dass an beliebiger
+Stelle im Menütext das Zeichen »&« eingefügt
+und so die nachfolgende Taste als Beschleuniger definiert wurde. Dies
+war natürlich nicht portabel, funktionierte nur unter Windows
+und wurde folglich als Bug angesehen und eliminiert.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
+<tr>
+<td><font color="#FFFFFF"> Warnung </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+<p>
+Das JDK 1.1 implementiert nun ein eigenes Beschleunigerkonzept, das
+über Plattformgrenzen hinweg funktioniert. Dazu wurde die Klasse
+<a name="ixa102048"><a href="index_m.html#ixb101566"><font color=#000080><tt>MenuShortcut</tt></font></a></a>
+eingeführt, mit deren Hilfe Beschleunigertasten definiert und
+an einzelne Menüeinträge angehängt werden können.
+Eine Beschleunigertaste ist dabei immer ein einzelnes Zeichen der
+Tastatur, das zusammen mit der <i>systemspezifischen Umschalttaste
+für Beschleuniger</i> (<font color="#007700"><tt>[STRG]</tt></font>
+unter Windows und Motif, <font color="#007700"><tt>[COMMAND]</tt></font>
+unter MAC-OS) gedrückt werden muss, um den Menüeintrag aufzurufen.
+
+<p>
+Um einen Beschleuniger zu definieren, muss zunächst eine Instanz
+der Klasse <a href="index_m.html#ixb101566"><font color=#000080><tt>MenuShortcut</tt></font></a>
+erzeugt werden:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public MenuShortcut(int key)
+
+public MenuShortcut(int key, boolean useShiftModifier)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/awt/MenuShortcut.html" onClick="this.href=getApiDoc('java.awt.MenuShortcut')"><font color="#660066" size=-1>java.awt.MenuShortcut</font></a></td>
+</tr>
+</table>
+
+<p>
+Der erste Konstruktor erwartet den virtuellen Tastencode der gewünschten
+Beschleunigertaste (siehe <a href="k100184.html#kapitellowlevelevents">Kapitel 29</a>).
+Für einfache alphanumerische Zeichen kann hier auch das Zeichen
+selbst übergeben werden. Die Übergabe einer Funktionstaste
+ist leider nicht ohne weiteres möglich, denn deren virtuelle
+Tastencodes überschneiden sich mit den ASCII-Codes der Kleinbuchstaben.
+Funktionstasten können daher nur dann als Beschleuniger verwendet
+werden, wenn ihre virtuellen Tastencodes die Umwandlung in Großbuchstaben
+unverändert überstehen (z.B. <a href="index_v.html#ixb101542"><font color=#000080><tt>VK_DELETE</tt></font></a>).
+Der zweite Konstruktor erlaubt zusätzlich die Übergabe eines
+booleschen Parameters <font color="#000077"><tt>useShiftModifier</tt></font>,
+der dafür sorgt, dass der Beschleuniger nur dann greift, wenn
+neben der systemspezifischen Umschalttaste für Beschleuniger
+zusätzlich die Taste <font color="#007700"><tt>[UMSCHALT]</tt></font>
+gedrückt wird.
+
+<p>
+Um einen Beschleuniger an einen Menüpunkt zu binden, ist das
+<a href="index_m.html#ixb101566"><font color=#000080><tt>MenuShortcut</tt></font></a>-Objekt
+als zweites Argument an den Konstruktor von <a href="index_m.html#ixb101472"><font color=#000080><tt>MenuItem</tt></font></a>
+zu übergeben:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public MenuItem(String label, MenuShortcut s)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/awt/MenuItem.html" onClick="this.href=getApiDoc('java.awt.MenuItem')"><font color="#660066" size=-1>java.awt.MenuItem</font></a></td>
+</tr>
+</table>
+
+<p>
+Alternativ kann auch die Methode <a name="ixa102049"><a href="index_s.html#ixb101567"><font color=#000080><tt>setShortCut</tt></font></a></a>
+aufgerufen werden:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public void setShortcut(MenuShortcut s)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/awt/MenuItem.html" onClick="this.href=getApiDoc('java.awt.MenuItem')"><font color="#660066" size=-1>java.awt.MenuItem</font></a></td>
+</tr>
+</table>
+
+<p>
+Durch Aufruf von <a name="ixa102050"><a href="index_d.html#ixb101568"><font color=#000080><tt>deleteShortCut</tt></font></a></a>
+kann der einem Menüeintrag zugeordnete Beschleuniger gelöscht
+werden:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public void deleteShortcut()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/awt/MenuItem.html" onClick="this.href=getApiDoc('java.awt.MenuItem')"><font color="#660066" size=-1>java.awt.MenuItem</font></a></td>
+</tr>
+</table>
+
+<p>
+Aufgrund eines Bugs im AWT (der auch im JDK 1.2 noch enthalten war)
+muss nach der Definition eines Beschleunigers zusätzlich die
+Methode <a name="ixa102051"><a href="index_s.html#ixb101569"><font color=#000080><tt>setActionCommand</tt></font></a></a>
+aufgerufen werden, um den <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>,
+der beim Auslösen des Beschleunigers an den ActionListener gesendet
+werden soll, festzulegen:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public void setActionCommand(String command)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/awt/MenuItem.html" onClick="this.href=getApiDoc('java.awt.MenuItem')"><font color="#660066" size=-1>java.awt.MenuItem</font></a></td>
+</tr>
+</table>
+
+<p>
+Ohne diesen Aufruf würde ein <a href="index_n.html#ixb100235"><font color=#000080><tt>null</tt></font></a>-Objekt
+gesendet werden. Eine beispielhafte Aufrufsequenz zur Erzeugung eines
+Menüeintrags mit Beschleuniger sieht damit so aus:
+<a name="listingid030002"></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>Menu m;
+<font color="#555555">002 </font>MenuItem mi;
+<font color="#555555">003 </font>MenuShortcut ms;
+<font color="#555555">004 </font>
+<font color="#555555">005 </font><font color="#00AA00">//Datei</font>
+<font color="#555555">006 </font>m = <font color="#0000AA">new</font> Menu(<font color="#0000FF">"Datei"</font>);
+<font color="#555555">007 </font>
+<font color="#555555">008 </font>ms = <font color="#0000AA">new</font> MenuShortcut(KeyEvent.VK_N);
+<font color="#555555">009 </font>mi = <font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Neu"</font>,ms);
+<font color="#555555">010 </font>mi.setActionCommand(<font color="#0000FF">"Neu"</font>);
+<font color="#555555">011 </font>mi.addActionListener(listener);
+<font color="#555555">012 </font>m.add(mi);</pre>
+</font>
+</td>
+</tr>
+</table>
+<i>
+Listing 30.2: Erzeugen eines Menüeintrags mit Beschleuniger</i></p>
+
+<p>
+Hier wird der Menüeintrag »Neu« wie im vorigen Beispiel
+generiert und mit der Beschleunigertaste <font color="#007700"><tt>[STRG]</tt></font>+<font color="#007700"><tt>[N]</tt></font>
+ausgestattet.
+
+<p>
+Das folgende Beispiel zeigt eine Menüleiste mit zwei Menüs
+»Datei« und »Bearbeiten«, bei denen alle Menüeinträge
+mit Beschleunigern ausgestattet wurden:
+<a name="listingid030003"></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">/* MainMenu2.inc */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">class</font> MainMenu2
+<font color="#555555">004 </font><font color="#0000AA">extends</font> MenuBar
+<font color="#555555">005 </font>{
+<font color="#555555">006 </font> <font color="#0000AA">public</font> MainMenu2()
+<font color="#555555">007 </font> {
+<font color="#555555">008 </font> Menu m;
+<font color="#555555">009 </font> MenuItem mi;
+<font color="#555555">010 </font> MenuShortcut ms;
+<font color="#555555">011 </font>
+<font color="#555555">012 </font> <font color="#00AA00">//Datei</font>
+<font color="#555555">013 </font> m = <font color="#0000AA">new</font> Menu(<font color="#0000FF">"Datei"</font>);
+<font color="#555555">014 </font>
+<font color="#555555">015 </font> ms = <font color="#0000AA">new</font> MenuShortcut(KeyEvent.VK_N);
+<font color="#555555">016 </font> mi = <font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Neu"</font>,ms);
+<font color="#555555">017 </font> mi.setActionCommand(<font color="#0000FF">"Neu"</font>);
+<font color="#555555">018 </font> m.add(mi);
+<font color="#555555">019 </font>
+<font color="#555555">020 </font> ms = <font color="#0000AA">new</font> MenuShortcut(KeyEvent.VK_L);
+<font color="#555555">021 </font> mi = <font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Laden"</font>,ms);
+<font color="#555555">022 </font> mi.setActionCommand(<font color="#0000FF">"Laden"</font>);
+<font color="#555555">023 </font> m.add(mi);
+<font color="#555555">024 </font>
+<font color="#555555">025 </font> ms = <font color="#0000AA">new</font> MenuShortcut(KeyEvent.VK_S);
+<font color="#555555">026 </font> mi = <font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Speichern"</font>,ms);
+<font color="#555555">027 </font> mi.setActionCommand(<font color="#0000FF">"Speichern"</font>);
+<font color="#555555">028 </font> m.add(mi);
+<font color="#555555">029 </font>
+<font color="#555555">030 </font> ms = <font color="#0000AA">new</font> MenuShortcut(KeyEvent.VK_E);
+<font color="#555555">031 </font> mi = <font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Beenden"</font>,ms);
+<font color="#555555">032 </font> mi.setActionCommand(<font color="#0000FF">"Beenden"</font>);
+<font color="#555555">033 </font> m.add(mi);
+<font color="#555555">034 </font> add(m);
+<font color="#555555">035 </font>
+<font color="#555555">036 </font> <font color="#00AA00">//Bearbeiten</font>
+<font color="#555555">037 </font> m = <font color="#0000AA">new</font> Menu(<font color="#0000FF">"Bearbeiten"</font>);
+<font color="#555555">038 </font>
+<font color="#555555">039 </font> ms = <font color="#0000AA">new</font> MenuShortcut(KeyEvent.VK_X);
+<font color="#555555">040 </font> mi = <font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Ausschneiden"</font>,ms);
+<font color="#555555">041 </font> mi.setActionCommand(<font color="#0000FF">"Ausschneiden"</font>);
+<font color="#555555">042 </font> m.add(mi);
+<font color="#555555">043 </font>
+<font color="#555555">044 </font> ms = <font color="#0000AA">new</font> MenuShortcut(KeyEvent.VK_C);
+<font color="#555555">045 </font> mi = <font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Kopieren"</font>,ms);
+<font color="#555555">046 </font> mi.setActionCommand(<font color="#0000FF">"Kopieren"</font>);
+<font color="#555555">047 </font> m.add(mi);
+<font color="#555555">048 </font>
+<font color="#555555">049 </font> ms = <font color="#0000AA">new</font> MenuShortcut(KeyEvent.VK_V);
+<font color="#555555">050 </font> mi = <font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Einfügen"</font>,ms);
+<font color="#555555">051 </font> mi.setActionCommand(<font color="#0000FF">"Einfügen"</font>);
+<font color="#555555">052 </font> m.add(mi);
+<font color="#555555">053 </font> add(m);
+<font color="#555555">054 </font> }
+<font color="#555555">055 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/MainMenu2.inc"><font color="#000055" size=-1>MainMenu2.inc</font></a></td>
+</tr>
+</table>
+<i>
+Listing 30.3: Menüleisten mit zwei Menüs und Beschleunigertasten</i></p>
+
+<p>
+Wir werden später eine Methode vorstellen, die den Aufwand für
+das Erzeugen und Einfügen von Beschleunigern vermindert.
+
+<p>
+Die im JDK 1.1 eingeführten Beschleuniger haben Vor- und Nachteile.
+Ihr Vorteil ist, dass sie einfach zu erzeugen sind und über Plattformgrenzen
+hinweg funktionieren. Die Nachteile sind allerdings ihre eingeschränkte
+Funktionalität und die Unterschiede im Look-and-Feel gegenüber
+den speziellen Beschleunigern des jeweiligen Betriebssystems. So gibt
+es unter Windows beispielsweise keine Beschleuniger mehr in der Menüleiste
+(<font color="#007700"><tt>[ALT]</tt></font>+Buchstabe), und auch
+Menüeinträge können nicht mehr mit <font color="#007700"><tt>[ALT]</tt></font>+Tastenkürzel
+aufgerufen werden (sie zeigen auch keinen unterstrichenen Buchstaben
+mehr an).
+
+<p>
+Außerdem wird eine Beschleunigertaste zwangsweise an die systemspezifische
+Umschalttaste gebunden. Es ist damit nicht möglich, einfache
+Tasten wie <font color="#007700"><tt>[EINFG]</tt></font> oder <font color="#007700"><tt>[ENTF]</tt></font>
+als Beschleuniger zu definieren. Des weiteren lassen sich wegen der
+unglücklichen Umwandlung des virtuellen Tastencodes in Großbuchstaben
+viele Funktionstasten nicht als Beschleuniger verwenden. Dies sind
+sicherlich gravierende Restriktionen, die die Bedienung nicht unerheblich
+einschränken. Es bleibt zu hoffen, dass die nächste Version
+des AWT hier Verbesserungen bringt und eine umfassendere Menge der
+plattformspezifischen Features portabel zur Verfügung stellt.
+
+
+<!-- Section -->
+<a name="sectlevel3id030004004"></a>
+<h3>30.4.4 <a name="ixa102052">Untermenüs</a></h3>
+
+<p>
+Menüs lassen sich auf einfache Art und Weise schachteln. Dazu
+ist beim Aufruf der <a href="index_a.html#ixb100727"><font color=#000080><tt>add</tt></font></a>-Methode
+anstelle einer Instanz der Klasse <a href="index_m.html#ixb101472"><font color=#000080><tt>MenuItem</tt></font></a>
+ein Objekt der Klasse <a href="index_m.html#ixb101553"><font color=#000080><tt>Menu</tt></font></a>
+zu übergeben, das das gewünschte Untermenü repräsentiert.
+Das folgende Beispiel erweitert das Menü »Optionen«
+der Klasse <font color="#000077"><tt>MainMenu1</tt></font> um den
+Menüeintrag »Schriftart«, der auf ein Untermenü
+mit den verfügbaren Schriftarten verzweigt (der Code zur Erzeugung
+des Untermenüs steht in den Zeilen <a href="k100196.html#schachtelmenues.a">034</a>
+bis <a href="k100196.html#schachtelmenues.b">041</a>):
+<a name="schachtelmenues"></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">/* MainMenu3.inc */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">class</font> MainMenu3
+<font color="#555555">004 </font><font color="#0000AA">extends</font> MenuBar
+<font color="#555555">005 </font>{
+<font color="#555555">006 </font> <font color="#0000AA">private</font> MenuItem miRueck;
+<font color="#555555">007 </font> <font color="#0000AA">private</font> CheckboxMenuItem miFarbe;
+<font color="#555555">008 </font>
+<font color="#555555">009 </font> <font color="#0000AA">public</font> MainMenu3()
+<font color="#555555">010 </font> {
+<font color="#555555">011 </font> Menu m;
+<font color="#555555">012 </font>
+<font color="#555555">013 </font> <font color="#00AA00">//Datei</font>
+<font color="#555555">014 </font> m = <font color="#0000AA">new</font> Menu(<font color="#0000FF">"Datei"</font>);
+<font color="#555555">015 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Neu"</font>));
+<font color="#555555">016 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Laden"</font>));
+<font color="#555555">017 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Speichern"</font>));
+<font color="#555555">018 </font> m.addSeparator();
+<font color="#555555">019 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Beenden"</font>));
+<font color="#555555">020 </font> add(m);
+<font color="#555555">021 </font> <font color="#00AA00">//Bearbeiten</font>
+<font color="#555555">022 </font> m = <font color="#0000AA">new</font> Menu(<font color="#0000FF">"Bearbeiten"</font>);
+<font color="#555555">023 </font> m.add((miRueck = <font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Rueckgaengig"</font>)));
+<font color="#555555">024 </font> m.addSeparator();
+<font color="#555555">025 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Ausschneiden"</font>));
+<font color="#555555">026 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Kopieren"</font>));
+<font color="#555555">027 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Einfuegen"</font>));
+<font color="#555555">028 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Loeschen"</font>));
+<font color="#555555">029 </font> add(m);
+<font color="#555555">030 </font> <font color="#00AA00">//Optionen</font>
+<font color="#555555">031 </font> m = <font color="#0000AA">new</font> Menu(<font color="#0000FF">"Optionen"</font>);
+<font color="#555555">032 </font> m.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Einstellungen"</font>));
+<font color="#555555">033 </font>
+<font color="#555555">034 </font> <font color="#00AA00">//Untermenü Schriftart <a name="schachtelmenues.a"></a></font>
+<font color="#555555">035 </font> Menu m1 = <font color="#0000AA">new</font> Menu(<font color="#0000FF">"Schriftart"</font>);
+<font color="#555555">036 </font> m1.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Arial"</font>));
+<font color="#555555">037 </font> m1.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"TimesRoman"</font>));
+<font color="#555555">038 </font> m1.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"Courier"</font>));
+<font color="#555555">039 </font> m1.add(<font color="#0000AA">new</font> MenuItem(<font color="#0000FF">"System"</font>));
+<font color="#555555">040 </font> m.add(m1);
+<font color="#555555">041 </font> <font color="#00AA00">//Ende Untermenü Schriftart <a name="schachtelmenues.b"></a></font>
+<font color="#555555">042 </font>
+<font color="#555555">043 </font> m.add((miFarbe = <font color="#0000AA">new</font> CheckboxMenuItem(<font color="#0000FF">"Farbe"</font>)));
+<font color="#555555">044 </font> add(m);
+<font color="#555555">045 </font> <font color="#00AA00">//Rueckgaengig deaktivieren</font>
+<font color="#555555">046 </font> enableRueckgaengig(<font color="#006699">false</font>);
+<font color="#555555">047 </font> <font color="#00AA00">//Farbe anschalten</font>
+<font color="#555555">048 </font> setFarbe(<font color="#006699">true</font>);
+<font color="#555555">049 </font> }
+<font color="#555555">050 </font>
+<font color="#555555">051 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> enableRueckgaengig(<font color="#006699">boolean</font> ena)
+<font color="#555555">052 </font> {
+<font color="#555555">053 </font> <font color="#0000AA">if</font> (ena) {
+<font color="#555555">054 </font> miRueck.setEnabled(<font color="#006699">true</font>);
+<font color="#555555">055 </font> } <font color="#0000AA">else</font> {
+<font color="#555555">056 </font> miRueck.setEnabled(<font color="#006699">false</font>);
+<font color="#555555">057 </font> }
+<font color="#555555">058 </font> }
+<font color="#555555">059 </font>
+<font color="#555555">060 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> setFarbe(<font color="#006699">boolean</font> on)
+<font color="#555555">061 </font> {
+<font color="#555555">062 </font> miFarbe.setState(on);
+<font color="#555555">063 </font> }
+<font color="#555555">064 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/MainMenu3.inc"><font color="#000055" size=-1>MainMenu3.inc</font></a></td>
+</tr>
+</table>
+<i>
+Listing 30.4: Geschachtelte Menüs</i></p>
+
+<p>
+Ein Aufruf des Untermenüs wird folgendermaßen dargestellt:
+<p>
+<a name="imageid030002"></a>
+<img src="images/SchachtelMenues.gif">
+<p>
+
+<p><i>
+Abbildung 30.2: Geschachtelte Menüs</i></p>
+<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="k100192.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100195.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100197.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100201.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>
|
