将String呈现为HTML时如何获取String的大小?

时间:2019-04-20 18:42:29

标签: java swing graphics2d

当前,我正在开发新的外观,出于多种原因,我必须从头开始。我现在最大的问题是获取具有getText()的组件中String的宽度和高度,以确定其位置应该画出来,我知道如何将其用于普通文本,但是如果将其呈现为html文本,该怎么办?

使用FontMetrics确实提供了纯文本所需的所有内容,但将其用于html时就好像它是纯文本一样,因此我尝试了View.getGraphics()并使用{{1 }}的视图对象图形,但仍保持不变,但我想要的是绘制文本的尺寸(重要的区别在于,如果包含FontMetrics的高度将不准确!或者字体是更改为html标签等)。

<br />

我已经尝试过

    public Dimension getTextSize(JComponent c, Graphics g, String text) {
        //this works if you want to get the size as if it's plain text
        //and later in the drawing calculate the descent line distance to draw the text
        g.setFont(c.getFont());
        FontMetrics fontMetrics = g.getFontMetrics();
        Dimension plaintTextSize = new Dimension(fontMetrics.stringWidth(text),fontMetrics.getHeight());
        return plaintTextSize;
    }

并将View view = (View) JComponent.getClientProperty(BasicHTML.propertyKey); 传递给view.getGraphics()方法,但仍然相同。我进行了很多搜索,但找不到任何相对结果,并且对要使用的类一无所知使用,而我无法使用getTextSize,因为有时TextLayout可能不是JComponent。 请帮忙,谢谢你。

编辑

这样做似乎是一件真正的半不可能的事情,因为另一种解决方案将以JTextComponent解决以获取大小,但是有时缩放大小并不可靠,我的意思是像在组件中一样预测此冲突,但如何在绘制为View.getPreferredSpan(int axsis)的html字符串视图中预测此冲突,以至少手动处理该大小。

2 个答案:

答案 0 :(得分:1)

20多年来我一直没有尝试过这样做,但是由于JLabel可以接受html,请尝试使用您的html文本创建JLabel,然后获取标签的首选大小。

答案 1 :(得分:0)

很难找到整个网络,而没有真正问题的答案

  

如何将String呈现为HTML时获得其大小?

但是编辑后的另一个问题是如何使用

获取视图的实际大小和首选大小之间的差异
View.getPreferredSpan(int axsis);

返回大小将给出键入内容的大小,而不是绘制内容的大小 喜欢 如果文字是

<html> 
  <body>
     first line<br />
     second line <hr />
     third line
  </body>
</html>

它将使用

的大小
View.getPreferredSpan(int axsis);

获取第一,第二和第三行句子的文本大小,但它将使用Rectangle参数确定该<hr />行的结尾。