首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JTextPane绘制水平线

用JTextPane绘制水平线
EN

Stack Overflow用户
提问于 2014-08-27 19:16:54
回答 2查看 1.8K关注 0票数 2

这个问题似乎是this one的重复,但实际上并非如此。因此,在否决这个问题之前,请澄清是否有任何混淆。

我想在我的JTextPane中每6-7行之后画一条水平线,我正在使用StyledDocument并在运行时将字符串插入到我的JTextPane。类似于:

代码语言:javascript
复制
String myStr = "Some program-generated text";
doc.insertString(doc.getLength(), myStr, attributeSet);

现在,我如何在每隔几条线之后画一条水平线?我试过了

代码语言:javascript
复制
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();

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-27 20:14:44

就像这样!?

首先创建您自己的JTextPane子类。实现绘图方法,并使用图形上下文中的FontMetrics获取文本的高度。

代码语言:javascript
复制
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();
    }
}
票数 3
EN

Stack Overflow用户

发布于 2014-08-28 11:49:40

您可以通过编辑主方法来调用MyTextPane()子类而不是JTextPane() I.e来调用它。

代码语言:javascript
复制
public static void main(String[] args) {
    //add your jframe here
    JFrame frame=new  JFrame();
    //add component
    MyTextPane pane1=new MyTextPane();
    pane1.setText("text here");
    frame.add(pane1);
    frame.pack();
    frame1.setVisible(true);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25535277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档