JTextPane和空填充空间

时间:2012-09-25 01:21:19

标签: java swing border jtextpane margins

我在JScrollPane中有一个JTextPane,我想在JTextPane的顶部添加一个空的“填充空间”,以便JTextPane中的第一个实际文本行出现在JViewport的底部< / em>的。我有一个模糊的想法,可能在JTextPane的开头有一个空段落,并在每次调整JViewport大小时修改它的高度。任何人都有想法如何实现这样的事情?也许有一种更简单的方法?

2 个答案:

答案 0 :(得分:4)

您可以在JEditorPane中使用自定义垂直对齐的示例http://java-sl.com/tip_center_vertically.html。要垂直提供底部对齐,您应该将末尾的行更改为 offset =(targetSpan - textBlockHeight);

答案 1 :(得分:3)

您可以使用setMargin()设置组件边框与其文本之间的边距。例如:

textPane.setMargin(new Insets(20, 0, 0, 0));

编辑:

考虑以下非常简单的示例演示使用setMargin()

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FontMetrics;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;

public class MarginDemo {
    private static void createAndShowUI() {
        final JTextPane textPane = new JTextPane();
        final JScrollPane scrollPane = new JScrollPane(textPane);

        String text = "Lorem ipsum dolor sit amet, "
                + "consectetur adipiscing elit."
                + "Fusce nec sapien id diam consequat adipiscing.";
        textPane.setText(text);

        JFrame frame = new JFrame("MarginDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(scrollPane);

        frame.setSize(new Dimension(200, 200));
        frame.setVisible(true);

        EventQueue.invokeLater(new Runnable() {
            public void run() {
                FontMetrics metrics = textPane.getFontMetrics(textPane
                        .getFont());
                textPane.setMargin(new Insets(scrollPane.getViewport()
                        .getHeight() - metrics.getHeight(), 0, 0, 0));
            }
        });
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                createAndShowUI();
            }
        });
    }
}

结果如下:

enter image description here