Swing/HTMLEditorKit のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/HTMLEditorKit へ行く。
- title: JTextPaneで修飾したテキストをJTextAreaにHtmlソースとして表示する tags: [JTextPane, HTMLEditorKit, Html, JPopupMenu, JTextArea, JTabbedPane, ChangeListener] author: aterai pubdate: 2013-04-01T00:08:05+09:00 description: HTMLEditorKitを使用するJTextPaneで修飾したテキストをJTextAreaにHtmlソースとして表示、編集、JTextPaneに反映するテストを行なっています。
概要
HTMLEditorKit
を使用するJTextPane
で修飾したテキストをJTextArea
にHtml
ソースとして表示、編集、JTextPane
に反映するテストを行なっています。
Screenshot
Advertisement
サンプルコード
textPane.setComponentPopupMenu(new HTMLColorPopupMenu());
//textPane.setEditorKit(new HTMLEditorKit());
textPane.setContentType("text/html");
textArea.setText(textPane.getText());
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.addTab("JTextPane", new JScrollPane(textPane));
tabbedPane.addTab("JTextArea", new JScrollPane(textArea));
tabbedPane.addChangeListener(new ChangeListener() {
@Override public void stateChanged(ChangeEvent e) {
JTabbedPane t = (JTabbedPane)e.getSource();
int i = t.getSelectedIndex();
try{
if(i==0) {
textPane.setText(textArea.getText());
}else{
String str = textPane.getText();
textArea.setText(str);
}
}catch(Exception ex) {
ex.printStackTrace();
}
t.revalidate();
}
});
View in GitHub: Java, Kotlin解説
HTMLEditorKit
を使用(コンテンツ形式をtext/html
に設定)するJTextPane
でJEditorPane#getText()
を実行すると、HTMLEditorKit
からスタイル(文字色)などを設定したHtml
ソースとして文字列を取得することができるので、これをJTabbedPane
がJTextArea
に切り替わるときにJTextArea
に流しこんでいます。
逆に、JTextArea
でHtml
ソースを編集し、JTabbedPane
でJTextPane
に切り替える時には、JEditorPane#setText(String)
内で、HTMLEditorKit
にHTML
形式で読み込まれるようになっています。
- メモ
textPane.setContentType("text/html");
とコンテンツ形式を設定しておかないと、JEditorPane#setText(String)
でDocument
が更新されない場合がある?- この場合、以下のように、
textPane.setText(textArea.getText());
ではなく、HTMLEditorKit#insertHTML(...)
を使用する
//textPane.setText(textArea.getText());
textPane.setText("");
HTMLEditorKit hek = (HTMLEditorKit)textPane.getEditorKit();
HTMLDocument doc = (HTMLDocument)textPane.getStyledDocument();
hek.insertHTML(doc, 0, textArea.getText(), 0, 0, null);
HTMLEditorKit
から、HTML Tag
を取り除いた文字列を取得するサンプル
//import java.io.StringReader;
//import javax.swing.text.html.parser.*;
ParserDelegator delegator = new ParserDelegator();
final StringBuffer s = new StringBuffer();
delegator.parse(new StringReader(str), new HTMLEditorKit.ParserCallback() {
@Override public void handleText(char[] text, int pos) {
s.append(text);
}
}, Boolean.TRUE);
System.out.println(s.toString());