In diesem Unterkapitel werden die Events beschrieben, die von einer Swing-Komponenten erzeugt werden können. Diese Events können in drei Kategorien eingeordnet werden: Events, die von allen Swing-Komponenten generiert werden können. Events, die lediglich von einigen Swing-Komponenten erzeugt werden können. Events, die ausschließlich von speziellen Swing-Komponenten generiert werden können. Nachfolgend werden diese drei Kategorien näher betrachtet. Generelle Events Bei der Betrachtung von Abb. 8-10 ist festzustellen, dass alle Swing-Komponenten ihre Eigenschaften von der Klasse java.awt.Component erben und somit alle Komponenten die folgenden AWT-Events unterstützen: ComponentEvent wird ausgelöst, sobald eine Komponente ihre Größe, ihre Position oder ihre Sichtbarkeit verändert. FocusEvent wird der Fokus einer Komponente geändert, so wird ein FocusEvent ausgelöst. KeyEvent wird bei einer Tastaturbetätigung ausgelöst. MouseEvent wird ausgelöst, wenn die Maus betätigt wird. MouseMotionEvent wird ausgelöst, wenn sich die Position des Cursors ändert. Der Abb. 8-10 ist weiterhin zu entnehmen, dass alle Swing-Komponenten von der Container-Klasse abgeleitet sind und somit theoretisch in der Lage wären, einen ContainerEvent auszulösen. Da nicht alle Swing-Komponenten als Container betrachtet werden können, wird ein ContainerEvent-Objekt nur von Container-Komponenten generiert, bspw. von JPanel, JFrame und JApplet. Komponentenspezifische Events Das Package javax.swing.event definiert eine Reihe von Events, die von Swing-Komponenten ausgelöst werden können. Folgende Events werden hierbei oft verwendet: CaretEvent : wird generiert, um registrierte Listener-Objekte über die Änderung des Cursor-Symbols im Event-Source zu benachrichtigen. ChangeEvent wird generiert, um registrierte Listener-Objekte über Zustandsänderungen des Event-Source zu benachrichtigen. ListSelectionEvent charakterisiert eine Änderung eines aktuellen Auswahlobjekts (bspw. Liste). Table 8-1 stellt die in Swing häufig verwendeten Events dar. |
AWT | action (AWT) | caret | change | item (AWT) | List Selection | window (AWT)
JButton | x |  | x | x |  |
JCheckbox | x |  | x | x |  |
JComboBox | x |  |  | x |  |
JDialog |  |  |  |  |  | x
JEditorPane |  | x |  |  |  |
JFileChooser | x |  |  |  |  |
JFrame |  |  |  |  |  | x
JList |  |  |  |  | x |
JMenuItem | x |  | x | x |  |
JOptionPane |  |  |  |  |  | x
JPasswordField | x |  | x | x |  |
JProgressBar |  |  | x |  |  |
JRadioButton | x |  | x | x |  |
JSlider |  |  | x |  |  |
JTabbedPane |  |  | x |  |  |
JTextArea |  | x |  |  |  |
JTextField | x | x |  |  |  |
JTextPane |  | x |  |  |  |
JToggleButton | x |  | x | x |  |

Tab. 8.1: Events in Swing Es sei darauf hingewiesen, dass jede Swing-Komponente, die einen Event generieren kann, entsprechende Listener-Objekte mit add- bzw. remove-Listener hinzufügen oder entfernen kann. Hierzu ist bspw. für ein JButton-Objekt die folgende Syntax notwendig, um ein ActionListener-Objekt hinzuzufügen bzw. zu entfernen: JButton.addActionListener(listener) JButton.removeActionListener(listener) Für ein ChangeEvent-Objekt wäre bspw. die folgende Syntax nötig: JButton.addChangeListener(listener); JButton.removeChangeListener(listener); Analog ist für ItemEvent-Objekte die folgende Syntax zu verwenden: JButton.addItemListener(listener); JButton.removeItemListener(listener); Weitere Events Im Folgenden sind Events beschrieben, die eher selten Anwendung finden. AncestorEvent Event, der von einer Elternkomponente an eine Kindkomponente (Child) in der Komponentenhierarchie gesendet wird. HyperlinkEvent Event, der registrierte Event-Listener über Änderungen bezüglich eines Hypertext-Links benachrichtigt. DocumentEvent wird von JTextComponent-Objekten generiert und beinhaltet die Typen Change, Insert und Remove. InternalFrameEvent ist ein AWT-Event zur Unterstützung von JInternalFrame-Objekten. Diese Klasse besitzt den gleichen Event-Typ wie WindowEvent, allerdings mit verschiedenen Bezeichnern (IDs). ListEvent Event, der generiert wird, um eine Änderung in einer JList zu kapseln. MenuEvent Event, der generiert wird, wenn ein Menu-Objekt selektiert wird. UndoableEditEvent Event, der von JTextComponent generiert wird, um ein Listener-Objekt darüber zu benachrichtigen, dass eine rücksetzbare Aktion stattgefunden hat. Klasse TableEvent Eine JTable-Komponente kann zwei Arten von Events generieren: TableColumnModelEvent wird generiert, wenn das Spaltenmodell einer Tabelle verändert wird. Diese Änderung kann das Löschen, das Hinzufügen oder das Bewegen einer Spalte bedeuten. TableModelEvent wird generiert, wenn das Modell einer Tabelle geändert wird. Folgende Änderungen einer Tabelle können generiert werden: TableModelEvent(source) beschreibt eine mögliche Änderung aller Zeilen. TableModelEvent(source, HEADER_ROW) beschreibt eine Strukturänderung einer Tabelle. TableModelEvent(source, 1) generiert eine Nachricht, dass die erste Zeile geändert wurde. TableModelEvent(source, 3, 6) generiert eine Nachricht, dass die Zeilen 3 bis 6 geändert wurden. TableModelEvent(source, 2, 2, 6) beschreibt eine Änderung der Zelle (2,6). TableModelEvent(source, 3, 6, ALL_COLUMNS, INSERT) wird generiert, wenn die Zeilen 3 bis 6 der Tabelle neu hinzugefügt wurden. TableModelEvent(source, 3, 6, ALL_COLUMNS, DELETE) wird generiert, wenn die Zeilen 3 bis 6 gelöscht wurden. Klasse TreeEvent Folgende Events werden von einer JTree-Komponente generiert: TreeExpansionEvent wird generiert, wenn ein Jtree-Objekt auf- oder zusammengeklappt wird. TreeModelEvent kapselt Änderungen im Tree-Modell. TreeSelectionEvent wird generiert, sobald eine Änderung im selektierten Bereich auftritt. Event-Listener Die wichtigsten Event-Listener des Packages javax.swing.event sind in Tab. 8-2 aufgelistet.

Interface | Methoden
AncestorListener | ancestorAdded(AncestorEvent e) ancestorMoved(AncestorEvent e) ancestorRemoved(AncestorEvent e)
ChangeListener | stateChanged(ChangeEvent e)
DocumentListener | changedUpdate(DocumentEvent e) insertUpdate(DocumentEvent e) removeUpdate(DocumentEvent e)
ListDataListener | contentsChanged(ListDataEvent e) intervalAdded(ListDataEvent e) intervalRemoved(ListDataEvent e)
ListSelectionListener | valueChanged(ListSelectionEvent e)
MenuListener | menuCancelled(MenuEvent e) menuDeselected(MenuEvent e) menuSelected(MenuEvent e)
TableColumnModelListener | columnAdded(TableColumnModelEvent e) columnMarginChanged(ChangeEvent e) columnMoved(TableColumnModelEvent e) columnRemoved(TableColumnModelEvent e) columnSelectionChanged(ListSelectionEvent e)
TableModelListener | tableChanged(TableModelEvent e) tableRowsInserted(TableModelEvent e) tableRowsRemoved(TableModelEvent e)
TreeExpansionListener | treeCollapsed(TreeExpansionEvent e) treeExpanded(TreeExpansionEvent e)
TreeModelListener | treeNodesChanged(TreeModelEvent e) treeNodesInserted(TreeModelEvent e) treeNodesRemoved(TreeModelEvent e) treeStructureChanged(TreeModelEvent e)
TreeSelectionListener | valueChanged(TreeSelectionEvent e)

Tab. 8.2: Die wichtigsten Event-Listener und deren Methoden in Swing