JEditorPane
Die Klasse JEditorPane ist wie JTextField und JTextArea ebenfalls eine Kindsklasse von JTextComponent. Im Unterschied zu einer JTextArea, die nur einfachen Text darstellen kann (lediglich die Schriftart kann für den gesamten Text gesetzt werden), kann ein JEditorPane formatierten Text darstellen. So können beispielsweise Internetseiten inklusive Bilder angezeigt oder gar Dokumente bearbeitet werden.
Für die Formatierung ist eine Instanz der Klasse EditorKit zuständig. Diese kennt drei Standardformatierungen:
- text/plain: einfacher Text (Standardeinstellung, falls keine andere Formatierung erkannt wird)
- text/html: Text im HTML-Format
- text/rtf: Text im RTF-Format
Falls Sie eigene Formatierungsregeln anwenden bzw. ein anderes Format umsetzen möchten, können Sie aber auch eine eigene von EditorKit abgeleitete Klasse programmieren und eine Instanz dieser Klasse für Ihr JEditorPane setzen.
Neben dem parameterlosen Standardkonstruktor kennt die Klasse JEditorPane die folgenden Konstruktoren:
| Konstruktor | Kurzbeschreibung |
|---|---|
| JEditorPane(String url) | In diesem Konstruktor wird URL der Datei, deren Inhalt im JEditorPane angezeigt werden soll, als String übergeben. |
| JEditorPane(String type, String text) | Hier wird für das JEditorPane-Objekt die Formatierung (text/plain, text/html oder text/rtf) und der Text als String angegeben. |
| JEditorPane(URL initialPage) |
Bei diesem Konstruktor wird die Datei, deren Inhalt angezeigt werden soll, in Form eines Objektes der Klasse URL angegeben. |
Beispiel für ein JEditorPane, in dem eine HTML-Seite angezeigt wird:
import java.io.IOException; import javax.swing.*; public class JEditorPaneBeispiel { public static void main(String[] args) { JFrame frame = new JFrame("JEditorPaneBeispiel"); // Neuer JEditorPane wird erzeugt. JEditorPane editorPane = new JEditorPane(); // Anzuzeigende URL wird gesetzt. // Da setPage eine IOException wirft, muss // der Aufruf im try-catch-Block erfolgen. try { editorPane.setPage("http://www.java.com"); } catch (IOException ioe) { // HTML wird als Texttyp vorgegeben. editorPane.setContentType("text/html"); // Text für Fehlermeldung wird // im HTML-Format übergeben. editorPane.setText("<html><center>" + "<h1>Page not found</h1>" + "</center></html>."); } // Inhalt kann so nicht editiert werden. editorPane.setEditable(false); JScrollPane scrollPane = new JScrollPane(editorPane); frame.add(scrollPane); frame.setSize(800, 600); frame.setVisible(true); } }
Wir setzen für das JEditorPane mit der Methode setPage die URL "http://www.java.com". Die entsprechende Webseite wird im JEditorPane angezeigt. Da setPage eine IOException wirft, muss der Aufruf im try-catch-Block erfolgen.
Wie man sieht, wird richtigerweise erkannt, dass es sich um eine HTML-Seite handelt und der Inhalt entsprechend im JEditorPane dargestellt. Allerdings hat dies seine Grenzen. Rufen Sie die Seite mit einem Webbrowser auf, werden Sie im Vergleich feststellen, dass im JEditorPane nicht alles korrekt dargestellt wird.
Gut geeignet ist diese Funktionalität aber zum Beispiel für die Anzeige von selbsterstellten Seiten im HTML- und RTF-Format, beispielsweise um eine Dokumentation in die Software zu integrieren.
Falls die URL nicht erreichbar ist (Sie können dies selber testen, indem sie einfach mal eine ungültige URL angeben), wird der catch-Block ausgeführt. Dort setzen wir zunächst den Texttyp auf HTML. Anschließend setzen wir mit setText die Fehlermeldung im HTML-Format.
Damit die Seite sich scrollen lässt, wird das JEditorPane auf einem JScrollPane angeordnet.
Sie können auch einen eigenen Browser mit dem JEditorPane realisieren. Damit Ihr JEditorPane beim Anklicken von Hyperlinks die entsprechende Seite öffnet, muss dazu ein HyperlinkListener implementiert werden, der auf das Anklicken von Links entsprechend reagiert. Mehr zum Thema Event-Handling und EventListener erfahren Sie hier.
Neben den von JTextComponent geerbten Methoden, bietet JEditorPane unter anderem folgende Methoden:
| Methode | Kurzbeschreibung |
|---|---|
| void addHyperlinkListener(HyperlinkListener listener) |
Diese Methode fügt der Klasse einen HyperlinkListener hinzu. Der HyperlinkListener muss die Methode hyperlinkUpdate implementieren. Diese Methode wird aufgerufen, wenn ein Link mit dem Mauszeiger überfahren (hier wird zwischen den Ereignissen ENTERED und EXITED unterschieden) oder angeklickt (ACTIVATED) wird. |
| static EditorKit createEditorKitForContentType(String type) | Diese statische Methode liefert das EditorKit für den jeweiligen Texttypen (text/plain, text/html, text/rtf). |
| String getContentType() | Diese Methode liefert den Texttyp des Inhaltes. |
| EditorKit getEditorKit() | Gibt das verwendete EditorKit zurück. |
| static String getEditorKitClassNameForContentType(String type) | Diese statische Methode gibt den Klassennamen des zum angegebenen Texttyp gesetzten EditorKits zurück. |
| EditorKit getEditorKitForContentType(String type) | Diese Methode liefert das zum angegebenen Texttyp gesetzte EditorKit. |
| HyperlinkListener[] getHyperlinkListeners() | Hier werden alle registrierten HyperlinkListener in einem Array zurückgegeben. |
| URL getPage() | Diese Methode liefert die aktuell für das JEditorPane gesetzte URL. Ist die URL ungültig bzw. nicht gesetzt, so wird null zurückgeliefert. |
| String getText() | Gibt den Textinhalt des JEditorPanes zurück. |
| void read(InputStream in, Object desc) | Hier wird das JEditorPane direkt über einen InputStream gefüllt. Als zweiter Parameter kann beispielsweise eine Instanz von HTMLDocument angegeben werden. |
| static void registerEditorKitForContentType(String type, String classname) | Über diese statische Methode kann für einen bestimmten Texttyp eine EditorKit-Klasse vorgegeben werden. |
| void removeHyperlinkListener(HyperlinkListener listener) | Angegebener HyperlinkListener wird entfernt. |
| void replaceSelection(String content) | Über diese Methode wird ein markierter Text mit dem angegebenen Inhalt überschrieben. |
| void setContentType(String type) | Setzt den Texttyp. Über getEditorKitForContentType ermittelt diese Methode automatisch das dazu passende EditorKit und setzt diesen für das JEditorPane. |
| void setEditorKit(EditorKit kit) | Diese Methode entfernt alte EditorKit-Instanzen und setzt dann für das JEditorPane das angegebene EditorKit, sofern es nicht null ist. Wichtig zu wissen ist, dass dies dazu führt, dass ein neues Standarddokument angelegt wird, was bedeutet, dass der zuvor angezeigte Inhalt entfernt wird. |
| void setEditorKitForContentType(String type, EditorKit k) | Über diese Methode wird für den angegebenen Texttyp ein EditorKit-Objekt vorgegeben. |
| void setPage(String url) | Gibt die URL an, die im JEditorPane angezeigt werden soll. |
| void setPage(URL page) | Wie oben, mit dem Unterschied, dass die URL als Objekt der Klasse URL und nicht als String angegeben wird. |
| void setText(String t) | Setzt den Text, der im JEditorPane angezeigt werden soll. |
Einen vollständigen Überblick der Klasse und weiterführende Hinweise finden Sie in der Java API.
