Thema: SWING Komponenten 2

Werbung
WPP: Einführung in JAVA
Thema: SWING Komponenten 2
Autor: André Palapies
Inhalt: SWING Komponenten 2
1. JTable
1.1 Tabellenmodell
1.2 Spaltenmodell
1.3 Rendering der Zellen
1.4 Reaktion auf Ereignisse
2. JTree
2.1 Erzeugen eines Baumes
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 2
Inhalt: SWING Komponenten 2
2.2 Selektieren von Knoten
2.2.1 Konfiguration der Selektionsmöglichkeiten
2.2.2 Abfragen der Selektion
2.2.3 Verändern der Selektion
2.3 Öffnen und Schließen der Knoten
2.4 Verändern der Baumstruktur
3. Quellenangaben
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 3
1. J Table
Die in Benutzeroberflächen am häufigsten eingesetzten
Dialogelemente sind die Tabellen.
Da in dem Paket JAVA.AWT die Komponente
Tabelle fehlt, ist diese in SWING durch die Klasse
JTable zur Verfügung gestellt.
Mit Hilfe dieser Klasse lassen sich leicht textuelle oder
graphische Daten tabellarisch darstellen und editieren.
Hierbei entstehen weitreichende Möglichkeiten die Tabelle
zu konfigurieren, den Inhalt anzupassen und auf
Benutzerereignisse zu reagieren
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 4
1.1. Tabellenmodell
Das Tabellenmodell wird benötigt:
- für Anwendungen mit komplex Strukturierten Daten
- falls Daten für Arrays zu Umfangreich sind
- wenn Daten an externe Quellen gebunden sind
Das Tabellenmodell muss das Interface TableModel
aus dem Paket java.swing.table implementieren
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 5
1.1. Tabellenmodell
Im Interface TabelModel sind folgende Methoden definiert:
- die ersten beiden Methoden liefern die Zeilen
und Spaltenanzahl zurück
- public int getRowCount()
- public int getColumnCount()
- getColumnName liefert den Name der Spalte zurück
- public String getColumnName(int columnIndex)
- getColumnClass liefert den Typ der Elemente in
einer Spalte zurück
- public Class getColumnClass(int columnIndex)
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 6
1.1. Tabellenmodell
- mit dieser Service Methode wird überprüft ob eine
Zelle editiert werden darf
- public boolean isCellEditable(int rowIndex, int columnIndex)
- mit getValue wird der Wert einer bestimmten
Zelle abgefragt
- public Object getValueAt(int rowIndex, int columnIndex)
- mit der Methode setValueAt wir ein bestimmter
Wert in die Zelle geschrieben
- public void setValueAt(Object aVal, int rowInd, int colInd)
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 7
1.1. Tabellenmodell
- Hiermit kann ein TableModelListener registriert werden
- public void addTableModelListener(TableModelListener l)
- Mit dieser Methode kann der TableModelListener
deregistriert werden
- public void removeTableModelListener(TableModelListener l)
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 8
1.1. Tabellenmodell
TableModelListener:
Der TableModelListener wird über alle Änderungen an
einer Tabelle informiert:
- speziell wenn Spalten / Zeilen hinzugefügt
oder entfernt werden
- oder wenn Blöcke modifiziert werden sollen
- Typischerweise registriert sich die JTable bei einem
Modell um auf Änderungen reagieren zu können
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 9
1.1. Tabellenmodell
Beispiel 1: Ein Modell für schwach besetzte Tabellen
In diesem Beispiel wird eine sehr
große Tabelle (500x500 Zellen)
angelegt, mit nur wenig belegten
Zellen.
- Um eine speicherintensive Darstellung der
Tabelle zu vermeiden, wird hier eine
Hashtable verwendet.
- Diese speichert nur die belegten Zellen
ab. Das Grundmodell der Tabelle wird
aus der Klasse AbstactTableModel
des Pakets javax.swing.table gebildet.
Thema: SWING Komponenten 2
Autor: André Palapies
Konsolenausgabe
nach „Drucken“
© 2008
Seite: 10
1.2. Spaltenmodell
- Die Eigenschaften der Spalten können mit dem
Spaltenmodell, welches in der Klasse JTabel
enthalten ist, verändert werden.
- Dies ist erforderlich sobald mehr als der Name der
Spalte kontrolliert werden soll.
- Das Spaltenmodell einer JTable muss das Interface
TableColumModel implementieren.
- Die Standard-Implementierung eines leeren Modells kann
mit der Klasse DefaultTableColumModel vereinfacht
werden. Die eigene Implementierung eines Modells
kann sich als sehr aufwändig gestalten.
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 11
1.2. Spaltenmodell
- Das hinzufügen oder entfernen einzelner Spaltenobjekte
sieht wie folgt aus:
- public void addColumn(TableColumn aColumn)
- public void removeColumn(TableColumn column)
- Jede Instanz der Klasse TabelModel repräsentiert dabei
die Eigenschaften einer einzigen Tabellenspalte.
- Es könnten beliebige weitere visuelle
Eigenschaften kontrolliert werden
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 12
1.2. Spaltenmodell
Beispiel 2: Eine JTabel mit eigenem Spaltenmodell
- In diesem Beispiel wird gezeigt, wie
man die anfängliche Breite der
Spalten einer Tabelle explizit setzt.
- Das Verhältnis der Spaltenbreite
bleibt beim ändern der Fenstergröße
gleich.
- Durch hinzufügen von TableColum
Objekten lässt sich die Spaltenbreite
angeben
- public TableColumn(int modelIndex, int width)
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 13
1.3. Rendering der Zellen
- Der als Rendering bezeichnete Vorgang sorgt dafür,
das die Zellen einer Tabelle auf dem Bildschirm
dargestellt werden können.
- Die Klasse JTable besitz einen Standard-Renderer,
auf den mit folgenden Methoden zugegriffen werden kann:
- public TableCellRenderer getDefaultRenderer
(Class columnClass)
- public void setDefaultRenderer
(Class columnClass, TableCellRenderer renderer)
- Sofern nicht in den Tabellenspalten ein eigener Renderer
bestimmt wird, wird der Standard-Renderer verwendet.
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 14
1.3. Rendering der Zellen
- Der Renderer muss das Interface TableCellRenderer
Implementieren. Es enthält folgende Methode:
- public Component getTableCellRendererComponent (
JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column )
- Diese Methode arbeitet als so genannte Factory-Methode
und wird aufgerufen wenn zur Darstellung einer Zelle
ein Renderer benötigt wird.
- Durch die übergebenen Argumente kann er erkennen in
welcher Zelle er aktiv werden soll, welchen Inhalt sie hat,
ob sie selektiert oder ob sie fokussiert ist.
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 15
1.3. Rendering der Zellen
- Standardmäßig wird als Renderer eine Instanz der Klasse
DefaultTableCellRenderer verwendet. Diese ist eine
Ableitung der Klasse JLabel und dient dazu
- die Farbe, Schriftart, Hintergrund der Tabelle
- sowie die besonderen Eigenschaften der Zelle anzupassen.
- pro Tabelle existiert nur eine Instanz, die für die Darstellung
aller Zellen in der Tabelle verantwortlich ist. Das Label wird
dazu jeweils an die Position der darzustellenden Zelle
verschoben und die erforderlichen Eigenschaften übergeben.
- Vom Ableiten einer eigenen Klasse aus dem
DefaultTabelCellRenderer wird abgeraten, da dieser
für die Anwendung eigentlich nicht vorgesehen war.
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 16
1.3. Rendering der Zellen
Beispiel 3: Eine Tabelle mit eigenem Renderer
- Im folgenden Beispiel wird ein
eigener Renderer verwendet, der
Zellen einer schon bekannten Tabelle
in unterschiedlichen Farben darstellt.
- Hierbei werden die Zellen der dritten
Spalte nach Anzahl der erreichten
Punkte eingefärbt.
- die fokussierte Zeile ist hell Blau und
die fokussierte Spalte ist dunkel Blau
mit weißer Schrift
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 17
1.3. Rendering der Zellen
- Bei jedem Aufruf von getTableCellRendererComponent
erzeugt der Renderer eine Instanz der Klasse JLabel.
- Da dieses während der arbeit mit einer Tabelle sehr
häufig passiert, ist diese Vorgehensweise recht ineffizient
und sollte nur bei kleineren Tabellen eine Lösung sein, da
der Garbage-Collector sehr belastet wird.
- Eine bessere Methode wäre zum Beispiel das Programm so
zu schreiben, das nur eine Instanz erzeugt wird, oder das die
Renderer zwischengespeichert werden und bei erneutem
Bedarf wieder verwendet werden
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 18
1.4. Reaktion auf Ereignisse
- Will ein Objekt z.B. über eine Änderung des Tabelleninhaltes,
die Selektierung einer Zelle oder das anklicken einer Zelle
mit der Mouse informiert werden, so bedarf es mehrerer
Listener die die verschiedenen Ereignisse erfassen können.
Veränderung des Tabelleninhaltes:
- soll die Änderung des Tabelleninhaltes angezeigt werden, so
muss im Tabellenmodel durch Aufruf des Listeners
addTableModelListener ein TableModelListener registriert
werden.
- Bei jeder Änderung des Inhaltes wird dann die
Methode tableChanged aufgerufen.
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 19
1.4. Reaktion auf Ereignisse
Veränderung der Selektion:
- soll darüber informiert werden, das sich die Selektion
geändert hat, so werden zwei ListSelektionListener benötigt.
- der erste wird auf dem Selektionsmodell registriert, der
zweite wird auf dem Spaltenmodell registriert.
- bei jeder Änderung der Selektion wird nun valueChanged
aufgerufen und kann durch die Methoden
getSelektionModel und getColumnModel
ermitteln, welche Zeile und Spalte selektiert ist.
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 20
1.4. Reaktion auf Ereignisse
Mouseklick auf Tabelle:
- Soll auf einen Klick mit der Maustaste reagiert werden,
kann durch Aufruf von addMouseListener ein
MouseListener registriert werden.
- Innerhalb seiner Ereignismethoden kann mit getX und getY
die aktuelle Mausposition abgefragt und mit den Methoden
rowAtPoint und columnAtPoint in Zeilen- und Spaltenwerte
der Tabelle umgerechnet werden
- public int rowAtPoint(Point point)
public int columnAtPoint(Point point)
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 21
2. J Tree
JTree ist die zweite große elementare Komponente in Swing
- Eine JTree dient zur Bearbeitung, Darstellung und Navigation
baumartiger, hierarchischer Datenstrukturen
- Die besten Beispiele für eine derartige Baumstruktur sind
das Dateisystem, wie zum Beispiel unter Windows, oder
das Inhaltsverzeichnis eines Buches
- Das Hauptverzeichnis wird auch Root-Verzeichnis genannt
- Es können beliebig tief geschachtelte UnterverzeichnissStrukturen entstehen
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 22
2.1. Erzeugen eines Baumes
Folgende Begriffe haben sich im Umgang mit Bäumen etabliert:
- das Startelement wird Wurzel genannt
- ein Element des Baumes wird als Knoten bezeichnet
- die in einem Knoten enthaltenen Elemente bezeichnet
man als Unterknoten oder Kindknoten
- das übergeordnete Element bezeichnet man
als Vaterknoten oder als Elternknoten
- Knoten die keinen Unterknoten besitzen werden
als Blätter bezeichnet
- Knoten die sowohl Vater- als auch Unterknoten enthalten,
bezeichnet man als innere Knoten
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 23
2.1. Erzeugen eines Baumes
- Das Instanzieren eines JTree erfolgt über einen der
beiden Konstruktoren dieser Klasse:
- dieser Konstruktor erwartet ein vordefiniertes TreeModel
- public JTree(TreeModel newModel)
- dieser erwartet lediglich die Wurzel des Baumes und
erzeugt ein DefaultTreeModel
- public JTree(TreeNode root)
- Ein TreeModel enthält alle relevanten Informationen über
die Struktur des Baumes und kann auf anfrage Informationen
über die Wurzel, die Knoten und Unterknoten liefern.
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 24
2.1. Erzeugen eines Baumes
- Bei einem JTree kann durch eine Konfiguration festgelegt
werden, ob das Root-Verzeichnis sichtbar ist oder nicht.
- public void setRootVisible(boolean rootVisible)
- public boolean isRootVisible()
- Knoten aus Objekten des Typs DefaultMutableTreeNode
sind Standardimplementierungen des TreeNode Interfaces,
sie beschreiben, wie ein Knoten Informationen über seine
Unter- und Vaterknoten zur Verfügung stellen kann.
- die wichtigsten Methoden von TreeNode sind:
- ermitteln der Anzahl der Unterknoten
- public int getChildCount()
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 25
2.1. Erzeugen eines Baumes
- folgende Methode liefert einen beliebigen Unterknoten
- public TreeNode getChildAt(int childIndex)
- mit der nächsten Methode getParent() kann der
Vaterknoten ermittelt werden
- public TreeNode getParent()
- mit isLeaf() kann abgefragt werden ob ein Knoten ein
Blatt ist oder noch einen Unterknoten besitzt
- public boolean isLeaf()
- Bei der Beschriftung des Knotens zur visuellen Darstellung
wird die Methode toString der Knotenklasse verwendet
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 26
2.1. Erzeugen eines Baumes
- eine einfache Implementierung von TreeNode steht mit
defaultMutableTreeNode zur Verfügung
- sie enthält das aus TreeNode abgeleitete Interface
MutableTreeNode und bietet einfache Methoden zum
einfügen und löschen von Knoten
- public DefaultMutableTreeNode(Object userObject)
- DefaultMutableTreeNode stellt eine Vielzahl von Methoden
zur Verfügung. Sie kann unabhängig von der Verwendung
in einem JTree zum Aufbau und zur Verarbeitung
baumartiger Datenstrukturen verwendet werden.
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 27
2.1. Erzeugen eines Baumes
Ausschnitt einiger wichtiger Methoden:
- Hinzufügen eines Knoten ans ende der Liste der Unterknoten
- public void add(MutableTreeNode newChild)
- Hinzufügen eines Knoten an beliebiger Stelle
- public void insert(MutableTreeNode newChild, int childIndex)
- Remove entfernt einen beliebigen Kindknoten aus der Liste
- public void remove(int childIndex)
- Mit RemoveAllChildren werden alle Kindknoten gelöscht
- public void removeAllChildren()
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 28
2.1. Erzeugen eines Baumes
- Anwendungsbezogene Informationen werden in einem
UserObjekt gehalten, welches direkt an den Konstruktor
übergeben werden kann. Mit folgenden beiden Funktionen
kann auch nach der Konstruktion noch darauf zugegriffen
werden.
- public void setUserObject(Object userObject)
- public Object getUserObject()
- das UserObject ist auch Lieferant für die Knotenbeschriftung:
- jeder Aufruf von toString wird
an das UserObject weitergeleitet.
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 29
2.1. Erzeugen eines Baumes
Beispiel 4: Darstellung eines einfachen JTree
- Nebenstehendes Bild zeigt die
Baumstruktur eines JTree wie es
in vielen Dateisystemen zum tragen
kommt
- Dieses Beispielprogramm erzeugt
eine Wurzel, in der vier Unterknoten
mit jeweils vier weiteren Blättern
(Endpunkte) erzeugt werden
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 30
2.2. Selektieren von Knoten
2.2.1 Konfiguration der Selektionsmöglichkeiten
- Das Selektieren von Knoten wird durch das
TreeSelektionModel gesteuert, mit Hilfe der Methoden
setSelektionModel und getSelektionModel kann
darauf zugegriffen werden:
- public void setSelectionModel
(TreeSelectionModel selectionModel)
- public TreeSelectionModel getSelectionModel()
- Ein JTree erlaubt das Selektieren mehrerer Knoten
gleichzeitig.
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 31
2.2.1 Konfiguration der Selektion
- Falls die Selektionsmöglichkeit auf nur einen Knoten
beschränkt werden soll, so muss ein eigenes
TreeSelektionModel an setSelektionModel übergeben
werden.
- Dazu kann eine Instanz der Klasse
DefaultTreeSelektionModel erzeugt und durch den Aufruf
von setSelektionMode und der Übergabe einer Konstanten:
konfiguriert werden:
- public void setSelectionMode(int mode)
- mode:
- SINGLE_TREE_SELEKTION,
- CONTIGUOUS_TREE_SELECTION
- oder DISCONTIGUOUS_TREE_SELEKTION
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 32
2.2.2 Abfragen der Selektion
- JTree stellt eine Reihe von Methoden zur Verfügung,
mit denen man abfragen kann, ob und welche Knoten
selektiert sind. Die wichtigsten von ihnen sind:
- Mit getSelektedPath wird das selektierte Element ermittelt.
Bei Mehrfachselektion liefert die Methode das erste
Selektierte Element zurück.
- public TreePath getSelectionPath()
- getSelektionPaths gibt ein Array mit allen
selektierten Knoten zurück
- public TreePath[ ] getSelectionPaths()
- getLeadSelektionPath liefert das markierte Element
- public TreePath getLeadSelectionPath()
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 33
2.2.2 Abfragen der Selektion
- Alle beschriebenen Methoden liefern Objekte des Typs
TreePath zurück. Sie beschreibt den Knoten im Baum über
den Pfad, der von der Wurzel aus beschrieben werden muss.
- Mit getLastPathComponent kann das letzte Element
dieses Pfads bestimmt werden.
- public Object getLastPathComponent( )
- Mit getPath kann der komplette Pfad ermittelt werden.
An erster Stelle liegt dabei die Wurzel des Baums, an
letzter Stelle das selektierte Element:
- public Object[ ] getPath( )
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 34
2.2.2 Abfragen der Selektion
- wenn
ermittelt werden soll, ob und wenn welche Elemente
im Baum selektiert sind, können die Methoden
isSelectionEmpty und isPathSelected aufgerufen werden:
- public boolean isSelectionEmpty()
- public boolean isPathSelected(TreePath path)
- jedes Element im Baum besitzt eine fortlaufende Nummer,
die mit 0 bei der Wurzel beginnt und sich dann zeilenweise
bis zum letzten Element fortsetzt.
- mit Hilfe dieser Nummer kann alternativ zum TreePath auf
die selektierten Elemente zugegriffen werden. Die Methoden
heißen getSelectionRows und getLeadSelectionRow.
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 35
2.2.2 Abfragen der Selektion
Soll ein JTree zur Steuerung anderer Komponenten
reagieren, muss das Programm unmittelbar auf
Änderungen der Selektion reagieren können.
- dazu kann ein TreeSelectionListener instanziert werden und
mit addTreeSelectionListener beim JTree registriert werden
- jede Änderung ruft die Methode valueChanged auf :
- public void valueChanged(TreeSelectionEvent event)
- Dieses Event enthält unter anderem die Methoden
getOldLeadSelectionPath und getNewLeadSelectionPath:
- public TreePath getOldLeadSelectionPath()
- public TreePath getNewLeadSelectionPath()
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 36
2.2.2 Abfragen der Selektion
Beispiel 5: Ein JTree mit TreeSelektionListener
Dieses Beispielprogramm erweitert
das letzte Programm um die
Funktionalität das selektierte Element
auf der Konsole auszugeben.
Dazu wird ein TreeSelektionModel
für Einfachselektion implementiert
und fügt einen TreeSelektionListener
hinzu, der jede Selektionsänderung
dokumentiert.
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 37
2.2.3 Verändern der Knoten
Die Selektion kann auch programmgesteuert verändert werden:
- Mit clearSelektion wird die Selektion gelöscht
- public void clearSelection()
- erweitern der Selektion um ein einzelnen Knoten
- public void addSelectionPath(TreePath path)
- erweitern der Selektion um eine beliebige Anzahl von Knoten
- public void addSelectionPaths(TreePath[ ] paths)
- unabhängig von der bisherigen Selektion, werden die als
Argument übergebenen Knoten selektiert.
- public void setSelectionPath(TreePath path)
- public void setSelectionPaths(TreePath[ ] paths)
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 38
2.3. Öffnen und Schließen der Knoten
Der Benutzer kann Knoten z.B. mit Mausbefehlen öffnen
oder schließen. Dadurch können die Unterknoten entweder
sichtbar oder versteckt werden. Mit folgende Methoden
können die Knoten abgefragt oder konfiguriert werden:
- isExpanded liefert true, wenn der Knoten geöffnet ist
- public boolean isExpanded(TreePath path)
- isCollapsed liefert true, wenn er geschlossen ist
- public boolean isCollapsed(TreePath path)
- hasBeenExpanded zeigt an, ob der Knoten überhaupt
schon einmal geöffnet wurde
- public boolean hasBeenExpanded(TreePath path)
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 39
2.3. Öffnen und Schließen der Knoten
- isVisible gibt genau dann true zurück, wenn der Knoten
sichtbar ist, d.h. wenn alle seine Elternknoten geöffnet sind
- public boolean isVisible(TreePath path)
- makeVisible kann ein Knoten sichtbar machen
- public void makeVisible(TreePath path)
- mit expandPath kann der Knoten geöffnet
- public void expandPath(TreePath path)
- mit collapsePath geschlossen werden
- public void collapsePath(TreePath path)
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 40
2.4. Verändern der Baumstruktur
Das Strukturelle und Inhaltliche ändern von Knoten, ist in
einem vorhandenen JTree ohne weiteres möglich.
- Wird die Knotenklasse DefaultMutableTreeNode verwendet,
reicht es allerdings nicht aus die entsprechenden Methoden
zum verändern aufzurufen.
- In diesem Fall würde die Änderung im Datenmodell
durchgeführt werden, aber die Bildschirmdarstellung
würde gleich bleiben.
- Alle Änderungen im Baum müssen über das JTree Modell
ausgeführt werden.
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 41
2.4. Verändern der Baumstruktur
- Für einfache Änderungen reicht es aus eine Instanz der
Klasse DefaultTreeModel zu verwenden.
- Sie stellt eine Vielzahl von Methoden zum hinzufügen,
löschen und ändern der Knoten zur Verfügung.
- Alle Änderungen werden sofort durch das Versenden eines
TreeModelEvent automatisch an alle TreeModelListener
weitergegeben und führen zu den gewünschten
Veränderungen
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 42
2.4. Verändern der Baumstruktur
Die zum Ändern des Modells benötigten Methoden
von DefaultTreeModel sind:
- insertNodeInto fügt ein neuen Kindknoten an einer
beliebigen Position hinzu.
- public void insertNodeInto( MutableTreeNode newChild,
MutableTreeNode parent, int index )
- removeNodeFromParent entfernt einen beliebigen Knoten
aus dem Baum (er darf auch Unterknoten enthalten)
- public void removeNodeFromParent
(MutableTreeNode node)
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 43
2.4. Verändern der Baumstruktur
- nodeChanged aufruf, wenn sich der Inhalt eines Knotens
so geändert hat dass seine Bildschirmdarstellung
erneuert werden muss
- public void nodeChanged(TreeNode node)
- getPathToRoot ist eine Hilfsmethode, mit der das zur
Konstruktion eines TreePath-Objekts erforderliche
Knoten-Array auf einfache Weise erstellt werden kann.
- public TreeNode[ ] getPathToRoot(TreeNode aNode)
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 44
2.4. Verändern der Baumstruktur
Beispiel 6: Einfügen, Ändern und löschen in einem Baum
- Dieses Beispielprogramm generiert
einen Baum, der zunächst nur den
Wurzelknoten enthält.
- Dieser ist vom Typ
DefaultMutableTreeNode
und wird in ein DefaultTreeModel
eingebettet.
- Neben dem JTree enthält das Programm drei Buttons, mit
denen ein neuer Knoten Eingefügt, gelöscht sowie seine
Beschriftung geändert werden kann.
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 45
5. Quellenangaben
Internet Seiten
1. www.galileo-press.de
Skript
1. Einführung in JAVA
Autor: Pernards / Klinker
E-Books / Bücher
1. Java ist auch eine Insel
Autor: Christian Ullenboom
2. Handbuch der Java Programmierung
Autor: Guido Krüger / Thomas Stark
Thema: SWING Komponenten 2
Autor: André Palapies
© 2008
Seite: 46
Vielen Dank für
Ihre Aufmerksamkeit
Herunterladen