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

最佳答案

您可以使用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();
            }
        });
    }
}


结果如下:

07-24 09:45
查看更多