установка JTextPane для типа содержимого HTML и использование построителей строк

Я использую построители строк для добавления текста в JTextPane, я установил тип содержимого как pane.setContentType("text/html");, но на самом деле текст не отображается в моем JTextPane.

Это пример моего добавления:

buildSomething.append("<b style=\"color:pink\">"+Birthday+"</span>");

Есть ли что-то, что я делаю серьезно неправильно? И как мне это исправить?


person orange    schedule 30.01.2012    source источник


Ответы (2)


Каждый раз, когда вызывается JTextPane.setText(...), определяется новый тип контента. Начните текст с "<html>" и у вас есть HTML.

Создается новый документ, в вашем случае HTMLDocument.


@mKorbel: каждый раз создается HTML для JTextPane.

    buildSomething.append("<html>");
    buildSomething1.append("<html>");
    for (int i = 0; i < 10; i++) {
        buildSomething.append("<span style=\"color:red\">" + myBirthday + "</span>");
        buildSomething1.append("<b style=\"color:blue\">" + myBirthday + "</b>");
    }
person Joop Eggen    schedule 30.01.2012
comment
Таким образом, 1_? Я попробовал это, но это все еще то же самое. - person orange; 31.01.2012
comment
ты сделал buildSomething = new StringBuilder(); buildSomething.append("<html>" + ...); textPane.setText(buildSomething.toString());? - person Joop Eggen; 31.01.2012
comment
Мне пришлось установить для свойства contentType в JTextPane значение text/html, чтобы оно заработало. - person Juan Calero; 20.11.2013

@Joop Эгген

1-й. генерация цикла

buildSomething.append("<span style=\"color:pink\">" + myBirthday + "</span>");

введите здесь описание изображения

2-й. цикл генерирует один и тот же вывод, я думаю, не имеет значения, заключен ли он внутри <html> ..<html> или нет, потому что есть pane.setContentType("text/html");

и (неправильный код, который я разместил здесь <html> ..</html>)

buildSomething1.append("<html><span style=\"color:pink\">" 
    + myBirthday + "</span></html>");

введите здесь описание изображения

import java.awt.*;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.html.HTMLDocument;

public class MyTextPane implements Runnable {

    private JFrame frm;
    private JScrollPane jsp;
    private JTextPane jta;
    private StringBuilder buildSomething = new StringBuilder();
    private StringBuilder buildSomething1 = new StringBuilder();
    final String myBirthday = "Birthday";

    public MyTextPane() {
        for (int i = 0; i < 10; i++) {
            buildSomething.append("<span style=\"color:red\">" + myBirthday + "</span>");
            buildSomething1.append("<span style=\"color:blue\">" + myBirthday + "</span>");
        }
        jta = new JTextPane();
        jta.setContentType("text/html");
        jta.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
        jta.setText(myBirthday);
        jsp = new JScrollPane(jta);
        jsp.setPreferredSize(new Dimension(250, 450));
        frm = new JFrame("awesome");
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frm.setLayout(new BorderLayout());
        frm.add(jsp, BorderLayout.CENTER);
        frm.setLocation(100, 100);
        frm.pack();
        frm.setVisible(true);
        new Thread(this).start();
    }

    @Override
    public void run() {
        try {
            Thread.sleep(1500);
        } catch (Exception e) {
            e.printStackTrace();
        }
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                jta.setText(null);
                HTMLDocument doc = (HTMLDocument) jta.getStyledDocument();
                try {
                    doc.insertAfterEnd(doc.getCharacterElement(doc.getLength()), buildSomething.toString());
                } catch (BadLocationException ex) {
                    Logger.getLogger(MyTextPane.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(MyTextPane.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
        try {
            Thread.sleep(1500);
        } catch (Exception e) {
            e.printStackTrace();
        }
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                HTMLDocument doc = (HTMLDocument) jta.getStyledDocument();
                try {
                    doc.insertAfterEnd(doc.getCharacterElement(doc.getLength()), buildSomething1.toString());
                } catch (BadLocationException ex) {
                    Logger.getLogger(MyTextPane.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(MyTextPane.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                MyTextPane fs = new MyTextPane();
            }
        });
    }
}
person mKorbel    schedule 30.01.2012