Event Handling

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:

syntax 

JButton.addActionListener(listener)
JButton.removeActionListener(listener)

Für ein ChangeEvent-Objekt wäre bspw. die folgende Syntax nötig:

syntax 

JButton.addChangeListener(listener);
JButton.removeChangeListener(listener);

Analog ist für ItemEvent-Objekte die folgende Syntax zu verwenden:

syntax 

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

 


SPNavRight SPNavRight SPNavRight
BuiltByNOF