当它呈现为 HTML 时,如何获取 String 的大小?

how to get the size of String when it's rendered as HTML?

目前我正在开发一种新的外观和感觉,出于多种原因我不得不从头开始,我现在最大的问题是获取 getText() 确定的组件中字符串的宽度和高度它应该画在哪里,我知道如何为普通文本获取它,但如果它呈现为 html 文本,我知道如何获取它??。

使用 FontMetrics 确实提供了纯文本所需的一切,但将它用于 html 就好像它是纯文本一样,所以我尝试了 View.getGraphics() 并做了同样的事情在它上面有 FontMetrics 的视图对象图形,但仍然相同,而我想要的是绘制的文本的尺寸(重要的差异,比如它包含 <br /> 高度将不准确! 或者如果在 html 标签中更改了字体等...) .

    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 方法,但仍然相同。我已经搜索了很多关于它的内容,但我找不到任何相关结果,我对什么一无所知class 使用但我不能使用 TextLayout 因为有时 JComponent 可能不是 JTextComponent 。 请帮忙,谢谢。

编辑

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

我已经 20 多年没有尝试这样做了,但由于 JLabel 将接受 html,请尝试使用您的 html 文本创建 JLabel,然后获取标签的首选大小。

遗憾地搜索整个网络,没有任何令人满意的真正问题的答案

how to get the size of String when it's rendered as HTML?

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

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

return 大小将给出键入内容的大小而不是绘制内容的大小 像 如果文字是

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

它将使用

的大小
View.getPreferredSpan(int axsis);

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