Не удается удалить дополнительный межстрочный интервал в JTextPane для HTML-контента - PullRequest
1 голос
/ 15 апреля 2010

Я не могу сжать строки в Java JTextPane, если установить тип контента на text/html. Я хотел бы, чтобы они были так близко друг к другу, как они, когда тип контента text/plain, по умолчанию.

Свойства CSS line-height, top-margin, ..., похоже, не помогают: (.

Это вывод моей программы-примера, который показывает, что строки занимают больше места, когда редактор HTML обрабатывает рендеринг:

альтернативный текст http://lh6.ggpht.com/_Wx4sMDdKKdU/S8cYWIPKhzI/AAAAAAAAAig/4QzFwygmEBs/simpleTextPane.PNG

Код, который генерирует кадр:

<code>import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.text.StyleConstants;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.StyleSheet;

public class DemoSimplestGui extends JFrame  {
    private static final long serialVersionUID = 1L;

    private static final int WINDOW_WIDTH = 800;
    private static final int WINDOW_HEIGHT = 130;

    private static final String PLAIN_TEXT = "" +
        "This is some <b>plain text</b>\n" +
        "separated by backslash-n characters\n" +
        "There's no empty space between lines\n" +
        "which is exactly what we need.";

    private static final String DIV_BASED_HTML_TEXT = "" +
        "<div>This is some <b>html text</b></div>" +
        "<div>that usses DIV tags.</div>" +
        "<div>There's too much blank space</div>" +
        "<div>and that sucks for my application</div>";

    private static final String PRE_BASED_HTML_TEXT = "" +
        "<pre>This is some <b>html text</b>
"+ "
that usses PRE tags
" + "
There's too much blank space grr
" + "
and that sucks for my application
"; public static void main (String [] args) { окончательный кадр DemoSimplestGui = новый DemoSimplestGui (); frame.setPreferredSize (новое измерение (WINDOW_WIDTH, WINDOW_HEIGHT)); frame.setSize (frame.getPreferredSize ()); frame.setMinimumSize (новое измерение (WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2)); frame.init (); frame.setVisible (истина); } public void init () { setLayout (новый BorderLayout (10, 10)); add (createPlainTextPane (), BorderLayout.WEST); add (createDivBasedHtmlTextPane (), BorderLayout.CENTER); add (createPreBasedHtmlTextPane (), BorderLayout.EAST); } частный JTextPane createPlainTextPane () { final JTextPane textPane = new JTextPane (); textPane.setContentType ( "текст / обычный"); StyleConstants.setFontFamily (textPane.getInputAttributes (), "Courier New"); textPane.setText (PLAIN_TEXT); вернуть textPane; } private JTextPane createDivBasedHtmlTextPane () { final JTextPane textPane = new JTextPane (); textPane.setContentType ( "текст / html"); textPane.setEditorKit (configureHtmlEditorKit (textPane)); textPane.setText (DIV_BASED_HTML_TEXT); вернуть textPane; } private JTextPane createPreBasedHtmlTextPane () { final JTextPane textPane = new JTextPane (); textPane.setContentType ( "текст / html"); textPane.setEditorKit (configureHtmlEditorKit (textPane)); textPane.setText (PRE_BASED_HTML_TEXT); вернуть textPane; } частный HTMLEditorKit configureHtmlEditorKit (JTextPane textPane) { окончательный набор HTMLEditorKit = (HTMLEditorKit) textPane.getEditorKit (); окончательная таблица стилей css = новая таблица стилей (); css.addRule ("body {font-family: monospaced; margin-top: 0; margin-down: 0; line-height: 0;}"); css.addRule ("div, pre {margin-top: 0; margin-down: 0; line-height: 0;}"); kit.setStyleSheet (CSS); возвратный комплект; } }

Я бы очень признателен за подсказку: D

Ответы [ 3 ]

1 голос
/ 15 апреля 2010

Это может зависеть от платформы:

DemoSimplestGui http://i39.tinypic.com/2d0hu1t.png

0 голосов
/ 15 апреля 2010

Решено! Если я использую Courier New вместо monospace для font-family, межстрочный интервал точно такой же, как в text-plain версии в Windows . Спасибо всем!

0 голосов
/ 15 апреля 2010

Попробуйте что-то вроде этого

StyledDocument doc= textPane.getStyledDocument();
MutableAttributeSet attr= new SimpleAttributeSet();
StyleConstants.setLineSpacing(attr, -0.2f); //NOTE: negative value.

Похоже, вы работаете в Windows. Какая версия JDK / JRE используется?

...