我在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();
}
});
}
}
结果如下: