1

チャット アプリケーションを作成していて、JEditorPane に文字列を追加したいので、JEditorPane.getDocument.insert() メソッドを使用してこれを行います。

clientListDoc.insertString(clientListDoc.getLength(),image+"-"+name[0]+"\n", null);

しかし、今は画像も表示したいです。コンテンツ タイプを HTML に設定し、これを使用します。

String temp=ClassLoader.getSystemResource("images/away.png").toString();
image="<img src='"+temp+"'></img>";

しかし、insert() を使用すると JEditorPane で画像を取得できませんが、setText() を使用すると画像が表示されます。助けてください!!この2つをやりたい!

getText を使用して前の文字列を取得し、新しい文字列をこの文字列に追加してから、setText() を使用して文字列全体を設定する方法がありますが、より良い解決策はありますか?

4

1 に答える 1

4

メソッドを使用setText()すると、HTML にフォーマットされます。ではinsertString、マークアップがテキストに変換されます。ドキュメントのソース HTML を見ると、< img src=imagepath >& lt;img src=imagepath & gt;になっていることがわかります。.

画像を適切に挿入するには、HTMLDocument クラスを使用する必要があります。

import javax.swing.*;
import javax.swing.text.*;
import javax.swing.text.html.*;

class Test {

    public static void main(String[] args) {

        JFrame frame = new JFrame();
        JEditorPane edPane = new JEditorPane(); 

        try {

            edPane.setContentType("text/html");

            System.out.println(edPane.getText());

            HTMLEditorKit hek = new HTMLEditorKit();

            edPane.setEditorKit(hek);

            HTMLDocument doc = (HTMLDocument) edPane.getDocument();

            doc.insertString(0, "Test testing", null);

            Element[] roots = doc.getRootElements();
            Element body = null;
            for( int i = 0; i < roots[0].getElementCount(); i++ ) {
                Element element = roots[0].getElement( i );
                if( element.getAttributes().getAttribute( StyleConstants.NameAttribute ) == HTML.Tag.BODY ) {
                    body = element;
                    break;
                }
            }

            doc.insertAfterEnd(body,"<img src="+ClassLoader.getSystemResource("thumbnail.png").toString()+">");
            System.out.println(edPane.getText());
        } catch(BadLocationException e) {
        } catch (java.io.IOException e) {}


        frame.add(edPane);

        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);


    }

}
于 2013-03-09T14:55:20.340 に答える