Я не могу сжать строки в 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