JTextArea dient dazu mehrzeiligen ASCII-Text zu erfassen bzw. anzuzeigen.
Es ist eine einfache TextKomponente die soweit wie möglich kompatibel
zum java.awt.TextArea sein soll.
Im Gegensatz zur awt-Klasse unterstützt sie nicht direkt das Scrollen.
Dazu muß man das JTextArea in einem JScrollPane anlegen um diese Eigenschaft
zu bekommen.
Verändert hat sich dadurch auch das sogenannte lineWrapping (d.h. Zeilen werden
dem sichtbaren Textfeld angepasst oder so gelassen wie sie definiert sind).
Bei JTextArea kann man diese Eigenschaft direkt bestimmen mit:
lineWraptrue | lange Zeilen werden dem Anzeigefenster angepasst, d.h. man sieht den ganzen Text |
---|---|
false | der Text verschwindet, wenn seine Zeilen laenger sind als das Anzeigefenster |
true | der Text wird so angepasst, dass Woerter nicht getrennt werden |
---|---|
false | der Text wird genau angepasst, keine Ruecksicht wird auf Worttrennung genommen |
Insbesondere kann man beim TextArea kein EditorKit setzen.
JEditorPane ist ein mehrzeiliges Feld in dem man verschiedene Arten von Text
erfassen und anzeigen kann. Man kann zusätzlich EditorKits
verwenden um die Möglichkeiten zur Verarbeitung zu verbessern.
Wie das TextArea muß man das JEditorPane in einem JScrollPane anlegen um das
Scrollen zu realisieren. LineWrapping (Zeilenanpassung) wird über das EditorKit
gehandhabt.
Je nachdem welches EditorKit gesetzt ist und welche Textart wir haben, wird der Text im JEditorPane unterschiedlich dargestellt.
Wenn wir z.B. ein HTMLEditorKit gesetzt haben und unser Text HTML-formatiert ist, hat JEditorPane die Funktionalität eines Webbrowsers.
Die verschiedenen Textarten, die standardmäßig unterstützt werden sind ASCII-Text, HTML und RTF.
JTextPane ist ein mehrzeiliges Feld in dem man wie beim EditorPane verschiedene Arten von Text anzeigen kann. Also auch ASCII-Text, HTML und RTF. Zusätzlich kann man es mit graphischen Elementen erweitern. JTextPane unterteilt ein Dokument in verschiedene Kapitel (Paragraphen)
Jedem Kapitel kann man bestimmte Eigenschaften zuordnen (z.B Schriftart, Linienabstände, Blocksatz, etc). Zusätzlich kann man jedem einzelnen Buchstaben bestimmte Attribute übergeben, die sich dann nicht auf das zugehörige Kapitel auswirken.
Wir haben nun nicht nur die Möglichkeit auf verschiedene EditorKits zuzugreifen sondern wir können auch direkt auf das Dokumentenmodell zugreifen. Das Dokumentenmodell ist eine Abbildung des Dokuments welche zur Darstellung verwendet wird.
// Variablen anlegen JPanel contentPane; JScrollPane jScrollPane = new JScrollPane(); JTextPane jTextPane = new JTextPane(); // Eigenschaften dem TextPane zuordnen jTextPane.setEditable(true); jTextPane.setBackground(Color.red); jTextPane.setSelectedTextColor(Color.blue); jTextPane.setSelectionColor(Color.white); jTextPane.setText("unser Text"); // Größe des Scrollpanes bestimmen jScrollPane.setBounds(new Rectangle(40, 30, 150, 50)); // JTExtPane dem Scrollpane hinzufügen jScrollPane.getViewport().add(jTextPane, null); // ScrollPane dem contentPane hinzufügen contentPane.add(jScrollPane, null);
// Variablen anlegen JTextPane jTextPane = new JTextPane(); // EditorKit erzeugen javax.swing.text.html.HTMLEditorKit eKit = new javax.swing.text.html.HTMLEditorKit(); // EditorKit setzen jTextPane.setEditorKit(eKit); // Text setzen jTextPane.setText("<HTML><BODY><b>ein Html-Text</b><br> zum Testen </BODY></HTML>");
EditorKits sind eine bestimmte Art von Konverter. Sie können sowohl einen vorgegebenen Text in ein Dokumentenmodell umwandeln, als auch ein Dokumentenmodell in einen Text zurückumwandeln. Je nach EditorKit entstehen dadurch die verschieden Arten von Texten.
Eine wichtige Implementation der abstrakten Klasse EditorKit ist die Klasse DefaultEditorKit, die die Bearbeitung von einfachem Text - ohne Formatierungen etc. - unterstützt. Insbesondere erden Text-Aktionen wie copy, cut, insert-newline, paste, tab unterstützt.
Zu beachten: wird automatisch beim Anlegen von EditorPane, TextPane erzeugt und gesetztDas StyledEditorKit stellt Methoden und Eigenschaften für eine bessere Textbearbeitung zur Verfügung. Diese Klasse erweitert insbesondere die Text-Aktionen um Font- und Größen-Informationen, um Stil und Ausrichtung.
Das HTMLEditorKit stellt Methoden und Eigenschaften für die Darstellung und Bearbeitung von HTML-Text zur Verfügung. Es wird die HTML-Version 3.2 mit einigen Ausnahmen (keine Frames, keine Applets, etc.) unterstützt.
Das RTFEditorKit ist speziell auf die Darstellung und Bearbeitung von RTF (Rich Text Format) ausgelegt.
In Java werden Dokumente immer als ein Modell gesehen. Das bedeutet: das Dokument wird aufgeteilt in Dokumenteigenschaften und in Text. Dadurch kann man z.B. einzelne Zeichen ändern ohne gleich den ganzen Text verändern zu müssen. Man benötigt also ein Dokument um Eigenschaften eines Zeichens zu setzen bzw. zu verändern.
Als zentrales Element dient das Interface Document, auf dem alle anderen Eigenschaften des Dokumentmodells beruhen. Dokumente können angesehen werden als Texte, die aus Elementen bestehen, durch die die Struktur - z.B. logische Abschnitte oder aber speziell formatierter Text - des Dokumentes beschrieben wird.
Mit JTextPane können wir auf ein StyledDocument zugreifen. DefaultStyledDocument ist eine Implementierung dieses Interfaces.
jTextPane.setText("<i>irgendein </i><b>Text</b>"); |
TextPane |
der eingegebene String wird weitergegeben an das: |
EditorKit |
der String wird in ein Modell umgewandelt, das den Text beinhaltet und alle zugehörigen Informationen |
Dokument |
jTextPane.getText(); | |
TextPane | |
fragt das EditorKit nach dem Text | |
EditorKit | |
fragt das Dokument nach dem Text und Zusatzinformationen | |
Dokument | hier kann man mit doc.getText(int,int) direkt auf das Dokument zugreifen. Liefert nur den Text, ohne Format.Zeichen! |
liefert den Text und die Zusatzinformationen | |
EditorKit | |
wandelt den Text des Dokuments um in einen Text mit Formatierungszeichen | |
TextPane |
Wenn wir nur den Text bearbeiten wollen, dann arbeiten wir mit dem Dokument.
Denn uns interessiert nicht die Formatierung, sondern der eigentliche Text.
jTextPane.getText() auf HTML-Text liefert HTML-Code, übers Dokument bekommen
wir den eigentlichen Text
void find(String sFind) { int iIndex = -1; String sText = ""; // Dokument erzeugen javax.swing.text.DefaultStyledDocument doc = (javax.swing.text.DefaultStyledDocument) jTextPane1.getStyledDocument(); // Text aus dem Dokument holen try { sText = doc.getText(0,doc.getLength()); } catch(Exception e){} // Stelle suchen iIndex = sText.indexOf(sFind); // gefundenen String im Text markieren if (iIndex > -1) { jTextPane1.select(iIndex,iIndex + sFind.length()); } }
Zu beachten:
Wenn man dem TextPane das neue Attribut zuweist, wirkt sich diese Zuweisung entweder nur
auf die aktuelle Cursorposition aus, oder, falls eine Markierung im Text vorhanden war, auf
diese Markierung.
MutableAttributeSet attr = new SimpleAttributeSet(); StyleConstants.setBold (attr, true); jTextPane1.setCharacterAttributes(attr, false);Vorgehensweise (Holen von Attributen):
AttributeSet as = jTextPane.getCharacterAttributes(); if (as != null) { for (java.util.Enumeration e1 = as.getAttributeNames() ; e1.hasMoreElements() ;) { Object temp = (Object) e1.nextElement(); if (temp.toString().equalsIgnoreCase("font-size") == true) { System.out.println("Size: --> "+as.getAttribute(temp)); } } }
JTextPane hat die Möglichkeit bei einem gesetzten HTMLEditorKit Hyperlinks
darzustellen und darauf zu reagieren.
Zu beachten ist hierbei, daß das TextPane auf readonly gesetzt werden muß.
public void hyperlinkUpdate(HyperlinkEvent event) { if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { System.out.println("Die URL lautet: "+event.getDescription()); } }