Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


8.6.11

javax.swing.text.JTextComponent



Textkomponenten in Swing bieten umfangreiche Konfigurationsmöglichkeiten. Während beim AWT das Betriebssystem die meisten Aufgaben übernimmt, können in Swing neben der Tastatur auch andere Quellen als Eingabelieferanten angegeben werden (z.B. über Sprache: Java-Speech-API). Dies wird durch das Input Method Framework definiert, welches die Eingaben, z.B. über Tastatur, filtert. So wird es beispielsweise möglich, durch einen Tastendruck mehrere Ereignisse an die Komponente zu schicken bzw. bestimmte Tastatureingaben nicht weiterzuleiten.

Neben den verschiedenen Eingabequellen können die Look-and-Feel Entwickler die Eingaben filtern.

javax.swing.text.TextAction

Jede Textkomponente hat eine Menge an Aktionen, die sich um die Verarbeitung bei einer Eingabe kümmern. Diese sind z.B. Text einfügen, Text selektieren und Ähnliches. Die Aktionen sind typischerweise Exemplare der Klasse javax.swing.text.TextAction. Diese Klasse bietet direkten Zugriff auf die Textkomponente (getFocusedComponent(), getTextComponent(ActionEvent e)), die den Fokus hat bzw. vor kurzem den Fokus besaß und deshalb das Ziel dieser Aktion darstellt. Diese Aktionen können dabei natürlich auch außerhalb der Komponente, beispielsweise in einer JToolBar, verwendet werden.
  // Action, die an Cursor-Position "aaa" einfügt
  TextAction action = new TextAction("insert-aaa") {
    public void actionPerformed(ActionEvent e) {
      JTextComponent comp = getTextComponent(e);
      try {
        comp.getDocument().insertString (
             comp.getCaretPosition(), "aaa", null);
      } catch (BadLocationException ex) { 
          ex.printStackTrace (); 
      }
    }
  };

javax.swing.text.KeyMap

Um nun einer Taste eine bestimmte Textaktion zuzuordnen, werden javax.swing.text.KeyMap-Exemplare der Komponente zugeordnet. Hier sind bestimmten Tasten entsprechende Aktionen zugeordnet. Die Standardimplementierung, die von Look-and-Feel-Entwicklern ersetzt werden kann, hat dabei den Namen JComponent.DEFAULT_KEYMAP. Durch vom Entwickler hinzugefügte KeyMaps können dabei die Verknüpfungen überschrieben werden. Das Reagieren auf Tasten mittels des java.awt.event.KeyListener-Interface wird zwar noch unterstützt, sollte aber besser durch eine eigene KeyMap realisiert werden.

  // Auf Strg-i reagieren
  JTextField tf = new JTextField();
  tf.getKeymap ().addActionForKeyStroke(
     KeyStroke.getKeyStroke(
       KeyEvent.VK_I, InputEvent.CTRL_MASK), action);

Model

Das javax.swing.text.Document-Interface bildet das Model einer JTextComponent. Ed besteht aus hierarchisch angeordneten Textteilen (wie beim einem DOM-Tree), die jeweils Attribute besitzen. Über das javax.swing.event.DocumentListener-Interface können Interessierte über Änderungen informiert werden.

javax.swing.text.Document

Ein Dokument hat ein Wurzelelement (javax.swing.text.Element), welches wiederum hierarchisch angeordnete Kinder hat. Jedes Element hat neben einem Namen (z.B. ein Text-Element) und der Position innerhalb des Dokuments eine Liste von Attributen (javax.swing.text.AttributeSet). Diese Attribute können beispielsweise Stilvorgaben sein.

Über das Dokument können Textänderungen leicht vorgenommen werden, ohne sich im Baum bewegen zu müssen.

Undo/Redo

Über die Klasse javax.swing.text.Document kann ein javax.swing.event.UndoableEditListener registriert werden. Dieser erhält dann Ereignisse, wenn eine Änderung stattgefunden hat.

Die Standardimplementierung dieses Listeners ist die Klasse javax.swing.undo.UndoManager, welche sich die Änderungen merkt. Mittels der Methoden undo() und redo() kann so der Programmierer leicht Änderungen zurück- bzw. wieder vornehmen.

  UndoManager manager = new UndoManager();
  JTextField f = new JTextField();
  f.getDocument().addUndoableEditListener(manager);
  ...
  manager.undo();


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.