Die JTextPane-Komponente kann neben der reinen Textdarstellung („Plain“) und RTF-Nutzung auch Dateien mit HTML-Code anzeigen, wobei mit „Datei“ auch eine Internet-Adresse gemeint sein kann.
Hier zeige ich Euch die Abwandlung des RTF-Beispieles für die Nutzung mit HTML-Dateien. Die Demodatei könnt Ihr unter textpane_html oder im Github-Archiv herunterladen – oder auch eine eigene HTML-Datei ausprobieren.
Das Programm sieht nach dem Start und dem Laden der Demo-Datei so aus:
Hier ist nun der Quellcode – wie bei allen anderen Beispielen benötigt Ihr intelliJ für eigene Tests:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
/* * Herkunft/Origin: http://java-crypto.bplaced.net/ * Programmierer/Programmer: Michael Fehr * Copyright/Copyright: frei verwendbares Programm (Public Domain) * Copyright: This is free and unencumbered software released into the public domain. * Lizenttext/Licence: <http://unlicense.org> * getestet mit/tested with: Java Runtime Environment 11.0.5 x64 * verwendete IDE/used IDE: intelliJ IDEA 2019.3.1 * Datum/Date (dd.mm.jjjj): 08.01.2020 * Funktion: TextPane HTML = laden und speichern einer HTML-Datei * Function: TextPane HTML = load and save of a html-file * * Hinweis/Notice * Sie benoetigen intelliJ um das Programm uebersetzen und ausfuehren zu koennen * You need intelliJ to build and run the program */ import javax.swing.*; import javax.swing.text.BadLocationException; import javax.swing.text.DefaultStyledDocument; import javax.swing.text.StyleContext; import javax.swing.text.StyledDocument; import javax.swing.text.html.HTMLEditorKit; import javax.swing.text.rtf.RTFEditorKit; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.MalformedURLException; public class TextPane { private JPanel panelMain; private JPanel panelButtons; private JScrollPane scrollPane; private JTextPane textPane; private JButton buttonLoadHtml; private JButton buttonSaveHtml; public TextPane() { textPane.setContentType("text/html"); textPane.setEditorKit(new HTMLEditorKit()); buttonLoadHtml.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { try { loadHtml("textpane_html.html"); } catch (IOException e) { e.printStackTrace(); } } }); buttonSaveHtml.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) {saveHtml("textpane_html.html"); } }); } public static void main(String[] args) { JFrame frame = new JFrame(); frame.setContentPane(new TextPane().panelMain); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setTitle("TextPane HTML"); frame.setSize(500, 350); frame.setVisible(true); } public void saveHtml(String filename){ try { FileOutputStream fos = new FileOutputStream(filename); HTMLEditorKit kit = (HTMLEditorKit) textPane.getEditorKit(); StyledDocument doc = textPane.getStyledDocument(); int len = doc.getLength(); kit.write(fos, doc, 0, len); fos.close(); } catch (IOException | BadLocationException e) { e.printStackTrace(); } textPane.requestFocus(); } public void loadHtml(String filename) throws IOException { File file = new File(filename); textPane.setPage(file.toURI().toURL()); textPane.requestFocus(); } } |
Der Sourcode der Form:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
<?xml version="1.0" encoding="UTF-8" ?> - <form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="TextPane"> - <grid id="27dc6" binding="panelMain" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1"> <margin top="10" left="10" bottom="10" right="10" /> - <constraints> <xy x="20" y="20" width="500" height="400" /> </constraints> <properties /> <border type="none" /> - <children> - <grid id="69623" binding="panelButtons" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1"> <margin top="0" left="0" bottom="0" right="0" /> - <constraints> <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false" /> </constraints> <properties /> <border type="none" /> - <children> - <component id="6d6c2" class="javax.swing.JButton" binding="buttonLoadHtml"> - <constraints> <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false" /> </constraints> - <properties> <text value="load html" /> </properties> </component> - <component id="1a763" class="javax.swing.JButton" binding="buttonSaveHtml"> - <constraints> <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false" /> </constraints> - <properties> <text value="save html" /> </properties> </component> </children> </grid> - <scrollpane id="5bf0e" binding="scrollPane"> - <constraints> <grid row="1" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false" /> </constraints> <properties /> <border type="none" /> - <children> - <component id="100bc" class="javax.swing.JTextPane" binding="textPane"> <constraints /> <properties /> </component> </children> </scrollpane> </children> </grid> </form> |
Alle Quellcodes zur JTextPane findet Ihr zum Download in meinem Github-Repository, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/JTextPane. Alle Programme sind unter Java 11 lauffähig (vermutlich auch unter Java 8) und wurden mit intelliJ IDEA entwickelt, welches für das eigene „Spielen“ notwendig ist.
Die Lizenz zum obigen Beispiel findet Ihr auf der eigenen Lizenz-Seite.
Letzte Bearbeitung: 08.01.2020