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