0

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

4

2 回答 2

4

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

于 2012-09-25T10:06:43.723 回答
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();
            }
        });
    }
}

结果如下:

在此处输入图像描述

于 2012-09-25T02:12:11.150 回答