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/k100240.html | |
| download | Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2 | |
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100240.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100240.html | 622 |
1 files changed, 622 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100240.html b/Master/Reference Architectures and Patterns/hjp5/html/k100240.html new file mode 100644 index 0000000..abf3803 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100240.html @@ -0,0 +1,622 @@ +<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,k100237.html;106,k100239.html;107,k100241.html;108,k100243.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="k100237.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100239.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100241.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100243.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 37 - Swing: Komponenten I
+</table>
+<hr>
+
+
+<!-- Section -->
+<a name="listenundcomboboxen"></a>
+<h2>37.3 Listen und Comboboxen </h2>
+<hr>
+<ul>
+<li><a href="k100240.html#listenundcomboboxen">37.3 Listen und Comboboxen</a>
+<ul>
+<li><a href="k100240.html#jlist">37.3.1 JList</a>
+<ul>
+<li><a href="k100240.html#sectlevel4id037003001001">Selektieren von Elementen</a>
+<li><a href="k100240.html#sectlevel4id037003001002">Den Listeninhalt dynamisch verändern</a>
+<li><a href="k100240.html#sectlevel4id037003001003">Beispiel</a>
+</ul>
+<li><a href="k100240.html#sectlevel3id037003002">37.3.2 JComboBox</a>
+</ul>
+</ul>
+<hr>
+
+
+<!-- Section -->
+<a name="jlist"></a>
+<h3>37.3.1 JList </h3>
+
+<p>
+Die Klasse <a name="ixa102633"><a href="index_j.html#ixb101777"><font color=#000080><tt>JList</tt></font></a></a>
+dient dazu, Listen von Werten darzustellen, aus denen der Anwender
+einen oder mehrere Einträge auswählen kann. Im Gegensatz
+zur AWT-Klasse <a href="index_l.html#ixb100717"><font color=#000080><tt>List</tt></font></a>
+kann sie nicht nur Strings, sondern beliebige Objekte enthalten. Auch
+die Darstellung der Listenelemente auf dem Bildschirm kann weitgehend
+frei gestaltet werden. Wir wollen uns die wichtigsten Eigenschaften
+von <a href="index_j.html#ixb101777"><font color=#000080><tt>JList</tt></font></a>
+ansehen und dazu zunächst mit den Konstruktoren beginnen:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public JList()
+public JList(Object[] listData)
+public JList(Vector listData)
+public JList(ListModel dataModel)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/javax/swing/JList.html" onClick="this.href=getApiDoc('javax.swing.JList')"><font color="#660066" size=-1>javax.swing.JList</font></a></td>
+</tr>
+</table>
+
+<p>
+Der parameterlose Konstruktor erzeugt eine leere Liste. Wird ein Array
+oder <a href="index_v.html#ixb100120"><font color=#000080><tt>Vector</tt></font></a>
+übergeben, erzeugt <a href="index_j.html#ixb101777"><font color=#000080><tt>JList</tt></font></a>
+aus dessen Daten ein Listenmodell und benutzt es zur Darstellung.
+Schließlich kann auch direkt eine Instanz der Klasse <a name="ixa102634"><a href="index_l.html#ixb101778"><font color=#000080><tt>ListModel</tt></font></a></a>
+übergeben werden, um den Inhalt der Liste zu definieren.
+<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>
+Ähnlich wie <a href="index_j.html#ixb101918"><font color=#000080><tt>JTextArea</tt></font></a>
+und andere Swing-Komponenten besitzt <a href="index_j.html#ixb101777"><font color=#000080><tt>JList</tt></font></a>
+keine eigene Funktionalität zum Scrollen der Daten, falls diese
+nicht vollständig auf den Bildschirm passen. Eine <a href="index_j.html#ixb101777"><font color=#000080><tt>JList</tt></font></a>
+wird daher meist in eine <a href="index_j.html#ixb101779"><font color=#000080><tt>JScrollPane</tt></font></a>
+eingebettet, bevor sie zu einem GUI-Container hinzugefügt wird.</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>
+
+
+<!-- Section -->
+<a name="sectlevel4id037003001001"></a>
+<h4>Selektieren von Elementen </h4>
+
+<p>
+Die meisten Methoden der Klasse <a href="index_j.html#ixb101777"><font color=#000080><tt>JList</tt></font></a>
+haben mit der Selektion der Listenelemente zu tun. Eine Liste kann
+sowohl Einzel- als auch Mehrfachselektion unterstützen:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public int getSelectionMode()
+public void setSelectionMode(int selectionMode)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/javax/swing/JList.html" onClick="this.href=getApiDoc('javax.swing.JList')"><font color="#660066" size=-1>javax.swing.JList</font></a></td>
+</tr>
+</table>
+
+<p>
+Mit <a name="ixa102635"><a href="index_s.html#ixb101946"><font color=#000080><tt>setSelectionMode</tt></font></a></a>
+wird der Selektionsmodus verändert. Als Argument kann eine der
+folgenden Konstanten der Klasse <a name="ixa102636"><a href="index_l.html#ixb101947"><font color=#000080><tt>ListSelectionModel</tt></font></a></a>
+übergeben werden:
+<ul>
+<li><a name="ixa102637"><a href="index_s.html#ixb101948"><font color=#000080><tt>SINGLE_SELECTION</tt></font></a></a>:
+Es kann maximal ein Element ausgewählt werden
+<li><a name="ixa102638"><a href="index_s.html#ixb101949"><font color=#000080><tt>SINGLE_INTERVAL_SELECTION</tt></font></a></a>:
+Es können mehrere Elemente eines zusammenhängenden Bereichs
+ausgewählt werden
+<li><a name="ixa102639"><a href="index_m.html#ixb101950"><font color=#000080><tt>MULTIPLE_INTERVAL_SELECTION</tt></font></a></a>:
+Eine beliebige Auswahl von Elementen kann selektiert werden
+</ul>
+
+<p>
+<a name="ixa102640"><a href="index_g.html#ixb101951"><font color=#000080><tt>getSelectionMode</tt></font></a></a>
+liefert den aktuellen Selektionsmodus. Es gibt eine Reihe von Methoden,
+um Informationen über die derzeit selektierten Elemente zu beschaffen:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public int getSelectedIndex()
+public int[] getSelectedIndices()
+
+public Object getSelectedValue()
+public Object[] getSelectedValues()
+
+public boolean isSelectedIndex(int index)
+public boolean isSelectionEmpty()
+
+public int getAnchorSelectionIndex()
+public int getLeadSelectionIndex()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/javax/swing/JList.html" onClick="this.href=getApiDoc('javax.swing.JList')"><font color="#660066" size=-1>javax.swing.JList</font></a></td>
+</tr>
+</table>
+
+<p>
+<a name="ixa102641"><a href="index_g.html#ixb101675"><font color=#000080><tt>getSelectedIndex</tt></font></a></a>
+liefert den Index des selektierten Elements, falls der Selektionsmodus
+<a href="index_s.html#ixb101948"><font color=#000080><tt>SINGLE_SELECTION</tt></font></a>
+ist. Können mehrere Elemente ausgewählt werden, liefert
+<a name="ixa102642"><a href="index_g.html#ixb101952"><font color=#000080><tt>getSelectedIndices</tt></font></a></a>
+ein Array mit den Indizes aller selektierten Elemente. <a name="ixa102643"><a href="index_g.html#ixb101953"><font color=#000080><tt>getSelectedValue</tt></font></a></a>
+und <a name="ixa102644"><a href="index_g.html#ixb101954"><font color=#000080><tt>getSelectedValues</tt></font></a></a>
+arbeiten in analoger Weise, liefern aber statt der Indizes die selektierten
+Elemente zurück. Mit <a name="ixa102645"><a href="index_i.html#ixb101955"><font color=#000080><tt>isSelectedIndex</tt></font></a></a>
+kann geprüft werden, ob das Element mit dem angegebenen Index
+gerade selektiert ist, und <a name="ixa102646"><a href="index_i.html#ixb101956"><font color=#000080><tt>isSelectionEmpty</tt></font></a></a>
+prüft, ob mindestens ein Element selektiert wurde.
+
+<p>
+Als »Anchor« und »Lead« bezeichnet Swing in einem
+zusammenhängend markierten Bereich das jeweils zuerst und zuletzt
+markierte Element. Das zuletzt markierte Element ist gleichzeitig
+aktuelles Element. Mit <a name="ixa102647"><a href="index_g.html#ixb101957"><font color=#000080><tt>getAnchorSelectionIndex</tt></font></a></a>
+und <a name="ixa102648"><a href="index_g.html#ixb101958"><font color=#000080><tt>getLeadSelectionIndex</tt></font></a></a>
+kann auf »Anchor« und »Lead« zugegriffen werden,
+wenn der Selektionsmodus <a href="index_s.html#ixb101949"><font color=#000080><tt>SINGLE_INTERVAL_SELECTION</tt></font></a>
+ist.
+
+<p>
+Zusätzlich gibt es Methoden, um die Selektion programmgesteuert
+zu verändern:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public void clearSelection()
+
+public void setSelectedIndex(int index)
+public void setSelectedIndices(int[] indices)
+
+public void setSelectionInterval(int anchor, int lead)
+public void addSelectionInterval(int anchor, int lead)
+public void removeSelectionInterval(int index0, int index1)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/javax/swing/JList.html" onClick="this.href=getApiDoc('javax.swing.JList')"><font color="#660066" size=-1>javax.swing.JList</font></a></td>
+</tr>
+</table>
+
+<p>
+Mit <a name="ixa102649"><a href="index_c.html#ixb101959"><font color=#000080><tt>clearSelection</tt></font></a></a>
+wird die Selektion gelöscht. Mit <a name="ixa102650"><a href="index_s.html#ixb101960"><font color=#000080><tt>setSelectedIndex</tt></font></a></a>
+kann ein einzelnes Element selektiert werden, mit <a name="ixa102651"><a href="index_s.html#ixb101961"><font color=#000080><tt>setSelectedIndices</tt></font></a></a>
+eine Menge von Elementen. Mit <a name="ixa102652"><a href="index_s.html#ixb101962"><font color=#000080><tt>setSelectionInterval</tt></font></a></a>,
+<a name="ixa102653"><a href="index_a.html#ixb101963"><font color=#000080><tt>addSelectionInterval</tt></font></a></a>
+und <a name="ixa102654"><a href="index_r.html#ixb101964"><font color=#000080><tt>removeSelectionInterval</tt></font></a></a>
+können Selektionen auch bereichsweise hinzugefügt und gelöscht
+werden.
+
+<p>
+Wird die Selektion geändert, versendet eine <a href="index_j.html#ixb101777"><font color=#000080><tt>JList</tt></font></a>
+ein <a name="ixa102655"><a href="index_l.html#ixb101965"><font color=#000080><tt>ListSelectionEvent</tt></font></a></a>
+an alle registrierten Listener. Um im Programm auf Änderungen
+zu reagieren, ist also lediglich das Interface <a name="ixa102656"><a href="index_l.html#ixb101966"><font color=#000080><tt>ListSelectionListener</tt></font></a></a>
+des Pakets <a name="ixa102657"><a href="index_j.html#ixb101967"><font color=#000080><tt>javax.swing.event</tt></font></a></a>
+zu implementieren und durch Aufruf von <a name="ixa102658"><a href="index_a.html#ixb101968"><font color=#000080><tt>addListSelectionListener</tt></font></a></a>
+bei der <a href="index_j.html#ixb101777"><font color=#000080><tt>JList</tt></font></a>
+zu registrieren. Jede Selektionsänderung führt dann zum
+Aufruf der Methode <a name="ixa102659"><a href="index_v.html#ixb101969"><font color=#000080><tt>valueChanged</tt></font></a></a>.
+
+
+<!-- Section -->
+<a name="sectlevel4id037003001002"></a>
+<h4>Den Listeninhalt dynamisch verändern </h4>
+
+<p>
+Etwas mehr Aufwand als beim AWT-Pendant muss getrieben werden, wenn
+der Inhalt einer <a href="index_j.html#ixb101777"><font color=#000080><tt>JList</tt></font></a>
+nach der Instanzierung modifiziert werden soll. In diesem Fall kann
+nicht mehr mit dem automatisch erzeugten Listenmodel gearbeitet werden,
+sondern es muss selbst eines erzeugt werden. Das Modell einer <a href="index_j.html#ixb101777"><font color=#000080><tt>JList</tt></font></a>
+muss stets das Interface <a name="ixa102660"><a href="index_l.html#ixb101778"><font color=#000080><tt>ListModel</tt></font></a></a>
+implementieren und der Liste durch Versenden eines <a name="ixa102661"><a href="index_l.html#ixb101970"><font color=#000080><tt>ListDataEvent</tt></font></a></a>
+jede Datenänderung mitteilen. Eine für viele Zwecke ausreichende
+Implementierung steht mit der Klasse <a name="ixa102662"><a href="index_d.html#ixb101971"><font color=#000080><tt>DefaultListModel</tt></font></a></a>
+zur Verfügung. Ihre Schnittstelle entspricht der Klasse <a href="index_v.html#ixb100120"><font color=#000080><tt>Vector</tt></font></a>
+(siehe <a href="k100092.html#abschnittvector">Abschnitt 14.2</a>),
+und alle erforderlichen Änderungsbenachrichtigungen werden automatisch
+verschickt. Die wichtigsten Methoden von <a href="index_d.html#ixb101971"><font color=#000080><tt>DefaultListModel</tt></font></a>
+sind:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public void clear()
+public void addElement(Object obj)
+public void removeElementAt(int index)
+
+public int size()
+public Object elementAt(int index)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/javax/swing/DefaultListModel.html" onClick="this.href=getApiDoc('javax.swing.DefaultListModel')"><font color="#660066" size=-1>javax.swing.DefaultListModel</font></a></td>
+</tr>
+</table>
+
+<p>
+Soll eine Liste mit einem benutzerdefinierten Modell arbeiten, wird
+dieses einfach manuell erzeugt und an den Konstruktor übergeben.
+Alle Einfügungen, Löschungen und Änderungen von Daten
+werden dann an diesem Modell vorgenommen. Durch Aufruf von <a name="ixa102663"><a href="index_g.html#ixb101972"><font color=#000080><tt>getModel</tt></font></a></a>
+kann auf einfache Weise auf das Modell einer <a href="index_j.html#ixb101777"><font color=#000080><tt>JList</tt></font></a>
+zugegriffen werden.
+
+<!-- Section -->
+
+<a name="sectlevel4id037003001003"></a>
+<h4>Beispiel </h4>
+
+<p>
+Zum Abschluss wollen wir uns ein Beispiel ansehen. Das folgende Programm
+instanziert eine <a href="index_j.html#ixb101777"><font color=#000080><tt>JList</tt></font></a>
+durch Übergabe eines String-Arrays. Bei jedem Drücken des
+Buttons »Ausgabe« gibt es die Liste der selektierten Elemente
+auf der Konsole aus:
+<a name="listingid037010"></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">/* Listing3710.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="#0000AA">import</font> javax.swing.*;
+<font color="#555555">006 </font>
+<font color="#555555">007 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing3710
+<font color="#555555">008 </font><font color="#0000AA">extends</font> JFrame
+<font color="#555555">009 </font><font color="#0000AA">implements</font> ActionListener
+<font color="#555555">010 </font>{
+<font color="#555555">011 </font> <font color="#0000AA">static</font> <font color="#0000AA">final</font> String[] DATA = {
+<font color="#555555">012 </font> <font color="#0000FF">"Hund"</font>, <font color="#0000FF">"Katze"</font>, <font color="#0000FF">"Meerschweinchen"</font>, <font color="#0000FF">"Tiger"</font>, <font color="#0000FF">"Maus"</font>,
+<font color="#555555">013 </font> <font color="#0000FF">"Fisch"</font>, <font color="#0000FF">"Leopard"</font>, <font color="#0000FF">"Schimpanse"</font>, <font color="#0000FF">"Kuh"</font>, <font color="#0000FF">"Pferd"</font>,
+<font color="#555555">014 </font> <font color="#0000FF">"Reh"</font>, <font color="#0000FF">"Huhn"</font>, <font color="#0000FF">"Marder"</font>, <font color="#0000FF">"Adler"</font>, <font color="#0000FF">"Nilpferd"</font>
+<font color="#555555">015 </font> };
+<font color="#555555">016 </font>
+<font color="#555555">017 </font> <font color="#0000AA">private</font> JList list;
+<font color="#555555">018 </font>
+<font color="#555555">019 </font> <font color="#0000AA">public</font> Listing3710()
+<font color="#555555">020 </font> {
+<font color="#555555">021 </font> <font color="#006699">super</font>(<font color="#0000FF">"JList"</font>);
+<font color="#555555">022 </font> addWindowListener(<font color="#0000AA">new</font> WindowClosingAdapter(<font color="#006699">true</font>));
+<font color="#555555">023 </font> Container cp = getContentPane();
+<font color="#555555">024 </font> <font color="#00AA00">//Liste</font>
+<font color="#555555">025 </font> list = <font color="#0000AA">new</font> JList(DATA);
+<font color="#555555">026 </font> list.setSelectionMode(
+<font color="#555555">027 </font> ListSelectionModel.MULTIPLE_INTERVAL_SELECTION
+<font color="#555555">028 </font> );
+<font color="#555555">029 </font> list.setSelectedIndex(2);
+<font color="#555555">030 </font> cp.add(<font color="#0000AA">new</font> JScrollPane(list), BorderLayout.CENTER);
+<font color="#555555">031 </font> <font color="#00AA00">//Ausgabe-Button</font>
+<font color="#555555">032 </font> JButton button = <font color="#0000AA">new</font> JButton(<font color="#0000FF">"Ausgabe"</font>);
+<font color="#555555">033 </font> button.addActionListener(<font color="#006699">this</font>);
+<font color="#555555">034 </font> cp.add(button, BorderLayout.SOUTH);
+<font color="#555555">035 </font> }
+<font color="#555555">036 </font>
+<font color="#555555">037 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> actionPerformed(ActionEvent event)
+<font color="#555555">038 </font> {
+<font color="#555555">039 </font> String cmd = event.getActionCommand();
+<font color="#555555">040 </font> <font color="#0000AA">if</font> (cmd.equals(<font color="#0000FF">"Ausgabe"</font>)) {
+<font color="#555555">041 </font> System.out.println(<font color="#0000FF">"---"</font>);
+<font color="#555555">042 </font> ListModel lm = list.getModel();
+<font color="#555555">043 </font> <font color="#006699">int</font>[] sel = list.getSelectedIndices();
+<font color="#555555">044 </font> <font color="#0000AA">for</font> (<font color="#006699">int</font> i = 0; i < sel.length; ++i) {
+<font color="#555555">045 </font> String value = (String)lm.getElementAt(sel[i]);
+<font color="#555555">046 </font> System.out.println(<font color="#0000FF">" "</font> + value);
+<font color="#555555">047 </font> }
+<font color="#555555">048 </font> }
+<font color="#555555">049 </font> }
+<font color="#555555">050 </font>
+<font color="#555555">051 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">052 </font> {
+<font color="#555555">053 </font> Listing3710 frame = <font color="#0000AA">new</font> Listing3710();
+<font color="#555555">054 </font> frame.setLocation(100, 100);
+<font color="#555555">055 </font> frame.setSize(200, 200);
+<font color="#555555">056 </font> frame.setVisible(<font color="#006699">true</font>);
+<font color="#555555">057 </font> }
+<font color="#555555">058 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing3710.java"><font color="#000055" size=-1>Listing3710.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 37.10: Die Klasse JList</i></p>
+
+<p>
+Die Programmausgabe ist:
+<p>
+<a name="imageid037008"></a>
+<img src="images/JList1.gif">
+<p>
+
+<p><i>
+Abbildung 37.8: Die Klasse JList</i></p>
+
+
+<!-- Section -->
+<a name="sectlevel3id037003002"></a>
+<h3>37.3.2 JComboBox </h3>
+
+<p>
+Eine <a name="ixa102664"><a href="index_j.html#ixb101973"><font color=#000080><tt>JComboBox</tt></font></a></a>
+ist das Swing-Pendant zur AWT-Klasse <a href="index_c.html#ixb101484"><font color=#000080><tt>Choice</tt></font></a>.
+Es stellt eine Kombination aus Textfeld und Liste dar. Die Liste ist
+normalerweise unsichtbar und wird vom Anwender nur dann geöffnet,
+wenn er einen Wert daraus auswählen will. Sie erlaubt grundsätzlich
+nur <i>einfache</i> Selektion. Die wichtigsten Konstruktoren von <a href="index_j.html#ixb101973"><font color=#000080><tt>JComboBox</tt></font></a>
+sind:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public JComboBox(Object[] items)
+public JComboBox(Vector items)
+public JComboBox(ComboBoxModel aModel)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/javax/swing/JComboBox.html" onClick="this.href=getApiDoc('javax.swing.JComboBox')"><font color="#660066" size=-1>javax.swing.JComboBox</font></a></td>
+</tr>
+</table>
+
+<p>
+Sie entsprechen den korrespondierenden Konstruktoren der Klasse <a href="index_j.html#ixb101777"><font color=#000080><tt>JList</tt></font></a>.
+Ein wichtiges Merkmal einer <a href="index_j.html#ixb101973"><font color=#000080><tt>JComboBox</tt></font></a>
+ist die Möglichkeit, das Textfeld editieren zu können oder
+nicht. Ist das der Fall, kann der Anwender auch Werte eingeben, die
+nicht in der Liste stehen; andernfalls ist er auf Listenwerte beschränkt.
+Mit den Methoden <a name="ixa102665"><a href="index_s.html#ixb101663"><font color=#000080><tt>setEditable</tt></font></a></a>
+und <a name="ixa102666"><a href="index_i.html#ixb101664"><font color=#000080><tt>isEditable</tt></font></a></a>
+kann auf diese Eigenschaft zugegriffen 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 setEditable(boolean aFlag)
+public boolean isEditable()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/javax/swing/JComboBox.html" onClick="this.href=getApiDoc('javax.swing.JComboBox')"><font color="#660066" size=-1>javax.swing.JComboBox</font></a></td>
+</tr>
+</table>
+
+<p>
+Zur Abfrage oder Auswahl des selektierten Elements stehen folgende
+Methoden 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 Object getSelectedItem()
+public void setSelectedItem(Object anObject)
+
+public int getSelectedIndex()
+public void setSelectedIndex(int anIndex)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/javax/swing/JComboBox.html" onClick="this.href=getApiDoc('javax.swing.JComboBox')"><font color="#660066" size=-1>javax.swing.JComboBox</font></a></td>
+</tr>
+</table>
+
+<p>
+Mit <a name="ixa102667"><a href="index_g.html#ixb101676"><font color=#000080><tt>getSelectedItem</tt></font></a></a>
+kann das selektierte Element abgefragt werden, mit <a name="ixa102668"><a href="index_s.html#ixb101974"><font color=#000080><tt>setSelectedItem</tt></font></a></a>
+kann es gesetzt werden. Wurde bei einer editierbaren <a href="index_j.html#ixb101973"><font color=#000080><tt>JComboBox</tt></font></a>
+vom Anwender ein Wert eingegeben, der nicht in der Liste steht, liefert
+<a href="index_g.html#ixb101676"><font color=#000080><tt>getSelectedItem</tt></font></a>
+diesen Wert. Mit <a name="ixa102669"><a href="index_g.html#ixb101675"><font color=#000080><tt>getSelectedIndex</tt></font></a></a>
+und <a name="ixa102670"><a href="index_s.html#ixb101960"><font color=#000080><tt>setSelectedIndex</tt></font></a></a>
+kann auch über die Indizes der Liste auf deren Elemente zugegriffen
+werden. <a href="index_g.html#ixb101675"><font color=#000080><tt>getSelectedIndex</tt></font></a>
+liefert -1, wenn vom Anwender ein Wert eingegeben wurde, der nicht
+in der Liste steht.
+
+<p>
+Im Gegensatz zu <a href="index_j.html#ixb101777"><font color=#000080><tt>JList</tt></font></a>
+stellt <a href="index_j.html#ixb101973"><font color=#000080><tt>JComboBox</tt></font></a>
+auch einige Methoden zur Verfügung, mit denen die Elemente der
+Liste dynamisch verändert werden können:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public void addItem(Object anObject)
+public void insertItemAt(Object anObject, int index)
+public void removeItem(Object anObject)
+public void removeItemAt(int anIndex)
+public void removeAllItems()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/javax/swing/JComboBox.html" onClick="this.href=getApiDoc('javax.swing.JComboBox')"><font color="#660066" size=-1>javax.swing.JComboBox</font></a></td>
+</tr>
+</table>
+
+<p>
+Mit <a name="ixa102671"><a href="index_a.html#ixb101674"><font color=#000080><tt>addItem</tt></font></a></a>
+wird ein neues Element an das Ende der Liste angehängt, mit <a name="ixa102672"><a href="index_i.html#ixb101975"><font color=#000080><tt>insertItemAt</tt></font></a></a>
+wird es an einer beliebigen Position eingefügt. <a name="ixa102673"><a href="index_r.html#ixb101976"><font color=#000080><tt>removeItem</tt></font></a></a>
+entfernt das angegebene Element, <a name="ixa102674"><a href="index_r.html#ixb101977"><font color=#000080><tt>removeItemAt</tt></font></a></a>
+das Element mit dem angegebenen Index. <a name="ixa102675"><a href="index_r.html#ixb101978"><font color=#000080><tt>removeAllItems</tt></font></a></a>
+entfernt alle Elemente aus der Liste.
+
+<p>
+Jedesmal, wenn ein anderes Element selektiert wird, sendet eine <a href="index_j.html#ixb101973"><font color=#000080><tt>JComboBox</tt></font></a>
+ein <a href="index_i.html#ixb101406"><font color=#000080><tt>ItemEvent</tt></font></a>
+an registrierte <a href="index_i.html#ixb101481"><font color=#000080><tt>ItemListener</tt></font></a>
+(und zwar sowohl für das deselektierte als auch für das
+selektierte Element). Nach Abschluss der Selektion oder wenn der Anwender
+in einer editierbaren <a href="index_j.html#ixb101973"><font color=#000080><tt>JComboBox</tt></font></a>
+einen Wert per Hand eingegeben hat, wird zusätzlich ein <a href="index_a.html#ixb101404"><font color=#000080><tt>ActionEvent</tt></font></a>
+an registrierte <a href="index_a.html#ixb101469"><font color=#000080><tt>ActionListener</tt></font></a>
+versendet.
+
+<p>
+Das folgende Programm enthält zwei Comboboxen, von denen die
+erste editierbar ist und die zweite nicht. Ihre Elemente stammen aus
+einem <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>-Array
+mit Farbwerten, das direkt an den Konstruktor übergeben wird:
+<a name="listingid037011"></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">/* Listing3711.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="#0000AA">import</font> javax.swing.*;
+<font color="#555555">006 </font>
+<font color="#555555">007 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing3711
+<font color="#555555">008 </font><font color="#0000AA">extends</font> JFrame
+<font color="#555555">009 </font>{
+<font color="#555555">010 </font> <font color="#0000AA">private</font> <font color="#0000AA">static</font> <font color="#0000AA">final</font> String[] COLORS = {
+<font color="#555555">011 </font> <font color="#0000FF">"rot"</font>, <font color="#0000FF">"grün"</font>, <font color="#0000FF">"blau"</font>, <font color="#0000FF">"gelb"</font>
+<font color="#555555">012 </font> };
+<font color="#555555">013 </font>
+<font color="#555555">014 </font> <font color="#0000AA">public</font> Listing3711()
+<font color="#555555">015 </font> {
+<font color="#555555">016 </font> <font color="#006699">super</font>(<font color="#0000FF">"JComboBox"</font>);
+<font color="#555555">017 </font> addWindowListener(<font color="#0000AA">new</font> WindowClosingAdapter(<font color="#006699">true</font>));
+<font color="#555555">018 </font> Container cp = getContentPane();
+<font color="#555555">019 </font> <font color="#0000AA">for</font> (<font color="#006699">int</font> i = 1; i <= 2; ++i) {
+<font color="#555555">020 </font> JPanel panel = <font color="#0000AA">new</font> JPanel();
+<font color="#555555">021 </font> panel.setLayout(<font color="#0000AA">new</font> FlowLayout(FlowLayout.LEFT, 10, 2));
+<font color="#555555">022 </font> panel.add(<font color="#0000AA">new</font> JLabel(<font color="#0000FF">"Farbe "</font> + i + <font color="#0000FF">":"</font>));
+<font color="#555555">023 </font> JComboBox combo = <font color="#0000AA">new</font> JComboBox(COLORS);
+<font color="#555555">024 </font> combo.setEditable(i == 1);
+<font color="#555555">025 </font> panel.add(combo);
+<font color="#555555">026 </font> cp.add(panel, i == 1 ? BorderLayout.NORTH : BorderLayout.CENTER);
+<font color="#555555">027 </font> }
+<font color="#555555">028 </font> }
+<font color="#555555">029 </font>
+<font color="#555555">030 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">031 </font> {
+<font color="#555555">032 </font> Listing3711 frame = <font color="#0000AA">new</font> Listing3711();
+<font color="#555555">033 </font> frame.setLocation(100, 100);
+<font color="#555555">034 </font> frame.setSize(200, 200);
+<font color="#555555">035 </font> frame.setVisible(<font color="#006699">true</font>);
+<font color="#555555">036 </font> }
+<font color="#555555">037 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing3711.java"><font color="#000055" size=-1>Listing3711.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 37.11: Die Klasse JComboBox</i></p>
+
+<p>
+Die Programmausgabe ist:
+<p>
+<a name="imageid037009"></a>
+<img src="images/JComboBox1.gif">
+<p>
+
+<p><i>
+Abbildung 37.9: Die Klasse JComboBox</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="k100237.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100239.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100241.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100243.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>
|
