java - 在 JTextPane 中绘制水平线

标签 java swing user-interface jtextarea

这个问题似乎与 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();

任何帮助将不胜感激。

最佳答案

像这样的东西!?

Screenshot of Sample Application

首先创建您自己的 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/

相关文章:

java - 无法将 JMenuItem 添加到 JPopupMenu 中的 JMenu

javascript - 与 shouldComponentUpdate 一起使用时,react-native-draggable-flatlist 拖放重置

java - Cassandra docker - 无法通过 JMX 连接

java - libGDX 如何将用户点击与对象位置匹配?

java - 编写 Swing 组件 : How do I add the ability to add ActionListeners?

c++ - 为什么 QWizard::nextId() 被调用两次?

user-interface - 在哪里可以找到 HTML 选择小部件的规范?

java - 如何在java-8中查找流类型

java - 获取 javax.mail.MessagingException 和 java.net.SocketException

java - .getText 在用户能够输入之前抓取文本