1

JTextPanecontent-typeをに設定すると、Javaで行をまとめることができませんtext/htmltext/plaincontent-typeがデフォルトの場合と同じように近づけてください。

、、 ...CSSプロパティline-heighttop-margin役に立たないようです:(。

これは私のサンプルプログラムの出力であり、HTMLエディターがレンダリングを処理するときに行がより多くのスペースを占めることを示しています。

代替テキストhttp://lh6.ggpht.com/_Wx4sMDdKKdU/S8cYWIPKhzI/AAAAAAAAAig/4QzFwygmEBs/simpleTextPane.PNG

フレームを生成するコードは次のとおりです。

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></pre>" +
        "<pre>that usses PRE tags</pre>" +
        "<pre>There's too much blank space grr</pre>" +
        "<pre>and that sucks for my application</pre>";

    public static void main(String[] args) {
        final DemoSimplestGui frame = new DemoSimplestGui();
        frame.setPreferredSize(new Dimension(WINDOW_WIDTH, WINDOW_HEIGHT));
        frame.setSize(frame.getPreferredSize());
        frame.setMinimumSize(new Dimension(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2));
        frame.init();
        frame.setVisible(true);
    }

    public void init() {
        setLayout(new BorderLayout(10, 10));
        add(createPlainTextPane(), BorderLayout.WEST);
        add(createDivBasedHtmlTextPane(), BorderLayout.CENTER);
        add(createPreBasedHtmlTextPane(), BorderLayout.EAST);
    }

    private JTextPane createPlainTextPane() {
        final JTextPane textPane = new JTextPane();
        textPane.setContentType("text/plain");
        StyleConstants.setFontFamily(textPane.getInputAttributes(), "Courier New");
        textPane.setText(PLAIN_TEXT);
        return textPane;
    }

    private JTextPane createDivBasedHtmlTextPane() {
        final JTextPane textPane = new JTextPane();
        textPane.setContentType("text/html");
        textPane.setEditorKit(configureHtmlEditorKit(textPane));
        textPane.setText(DIV_BASED_HTML_TEXT);
        return textPane;
    }

    private JTextPane createPreBasedHtmlTextPane() {
        final JTextPane textPane = new JTextPane();
        textPane.setContentType("text/html");
        textPane.setEditorKit(configureHtmlEditorKit(textPane));
        textPane.setText(PRE_BASED_HTML_TEXT);
        return textPane;
    }

    private HTMLEditorKit configureHtmlEditorKit(JTextPane textPane) {
        final HTMLEditorKit kit = (HTMLEditorKit) textPane.getEditorKit();
        final StyleSheet css = new StyleSheet();
        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);
        return kit;
    }

}

私は本当にいくつかのヒントをいただければ幸いです:D

4

3 に答える 3

1

これはプラットフォームに依存する場合があります。

デモSimplestGui

于 2010-04-15T15:37:35.540 に答える
0

解決しました!for のCourier New代わりに使用すると、行間はWindowsのバージョンとまったく同じになります。みんな、ありがとう!monospacefont-familytext-plain

于 2010-04-15T16:02:53.757 に答える
0

このようなことを試してください

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

Windowsを実行しているようです。JDK/JRE のどのバージョンが使用されていますか?

于 2010-04-15T15:48:00.730 に答える