JTextPane установлен с HTMLEditorkit, не учитывающим стиль выравнивания текста при использовании с тегом ‹pre›

Фрагмент кода ниже при запуске не отображает текст в JTextPane. Стиль выравнивания текста в теге pre вообще не соблюдается. Если стиль text-align удален ИЛИ если для него установлено значение «left», текст отображается в JTextPane. Мы используем тег pre для сохранения пробелов и отступов табуляции.

Мои требования:

1) Должна быть возможность видеть текст по центру / по правому краю.

2) Пробелы и табуляция в текстовой строке должны отображаться так же, как на JTextPane.

Любая помощь будет принята с благодарностью.!!

import javax.swing.text.BadLocationException;
import javax.swing.text.Document;

public class TestHTML {
public static void main(String[] args){
    javax.swing.JTextPane editor = new javax.swing.JTextPane();
    editor.setEditorKit(new javax.swing.text.html.HTMLEditorKit());
    String htmlText = "<html><head></head><body>" +
            "<pre style='text-align:center;color:blue;'>   " +
            "Hello   Spaced            World       !!!</pre>" +
            "</body></html>";
    editor.setText(htmlText);

    Document doc = editor.getDocument();
    try {
        System.out.println(doc.getText(0, doc.getLength()));
    } catch (BadLocationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    javax.swing.JFrame f = new javax.swing.JFrame("HTML Editor");
    f.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
    f.getContentPane().add(editor);
    f.pack();
    f.setVisible(true);
}

}


person Syati    schedule 13.10.2011    source источник


Ответы (1)


Я подозреваю, что элемент pre изначально предназначался для выравнивания по левому краю (для текста слева направо), и поэтому Swing игнорирует запрос. Почему бы вместо этого не попробовать поместить его как code внутри div? Вид:

Проверка HTML

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

public class TestHTML {

    public static void main(String[] args){
        JTextPane editor = new JTextPane();
        editor.setContentType("text/html");
        String htmlText = "<html><head></head><body>" +
            "<div style='text-align: center;'>" +
            "<code style='color:blue;'>   " +
            "Hello   SpacedWorld   !!!</code>" +
            "</div>" +
            "</body></html>";
        editor.setText(htmlText);

        JFrame f = new JFrame("HTML Editor");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(editor);
        f.pack();
        f.setVisible(true);
    }
}

Я только что понял, что пробелы между словами были сжаты до 1. Замените каждый на &nbsp;, чтобы исправить это.

person Andrew Thompson    schedule 13.10.2011
comment
Помещение текста в виде кода внутри блока div учитывает выравнивание, но вкладки игнорируются. Проблема в том, что текст будет передаваться этому методу случайным образом, и мы предполагаем украсить его HTML-тегами и установить в JTextPane. Вкладки можно обрабатывать с помощью , но текст также может содержать новые строки ('\n'). Как сохранить их, когда вы готовы установить текст на JTextPane? - person Syati; 14.10.2011
comment
Как вкладки должны обрабатываться в центрированном тексте? Казалось бы, в этом случае они избыточны. Что касается новых строк, то необходимо будет разбить текст на отдельные div элементов. - person Andrew Thompson; 14.10.2011