这个问题似乎与 this one 重复。但事实并非如此。因此,在否决这个问题之前,请澄清是否有任何困惑。
我想在 JTextPane
中每 6-7 行绘制一条水平线,我正在使用 StyledDocument
并将字符串插入到我的 JTextPane
在运行时。像这样的东西:
String myStr = "Some program-generated text";
doc.insertString(doc.getLength(), myStr, attributeSet);
现在如何在每隔几行后绘制一条水平线?我试过了
JTextPane textPane = new JTextPane();
textPane.setContentType("text/html");
textPane.setText("<html>Some Text Above The Line<hr size=5>Some Text Below</html>");
但目前我的应用程序使用 setContentType("text/plain");
将其更改为 Text.html
会扰乱整个 UI。此外,如果我使用 SetText()
那么它将作为新文本插入,所有以前的文本都将消失,我附加了 doc.insertString();
任何帮助将不胜感激。
最佳答案
像这样的东西!?
首先创建您自己的 JTextPane 子类。实现绘制方法并使用图形上下文中的 FontMetrics 来获取文本的高度。
public class MyTextPane extends JTextPane {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(new Color(255, 0, 0, 128));
FontMetrics fm = g2.getFontMetrics();
int textHeight = fm.getHeight();
for (int i = textHeight; i < getHeight(); i += (6 * textHeight)) {
g2.drawLine(0, i + 1, getWidth(), i + 1);
}
g2.dispose();
}
}
关于java - 在 JTextPane 中绘制水平线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25535277/