java - 当字符串呈现为 HTML 时,如何获取字符串的大小?

标签 java swing graphics2d

目前我正在开发新的外观和感觉,由于多种原因我必须从头开始,我现在最大的问题是获取具有 getText() 的组件中字符串的宽度和高度。确定应该在哪里绘制,并且我知道如何获取普通文本,但如果将其呈现为 html 文本,该怎么做??

使用FontMetrics确实提供了纯文本所需的一切,但将其用于 html 就好像它是纯文本一样,所以我尝试过 View.getGraphics()并用 FontMetrics 做同样的事情 View 对象图形的尺寸,但仍然相同,而我想要的是绘制的文本的尺寸(重要的差异,例如它是否包含 <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方法,但仍然相同。我搜索了很多,但找不到任何相关结果,而且我对要使用什么类一无所知,而且我无法使用 TextLayout有时 JComponent可能不是JTextComponent 。 请帮忙,谢谢。

编辑

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

最佳答案

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

关于java - 当字符串呈现为 HTML 时,如何获取字符串的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55776646/

相关文章:

java - GUI 应用程序并测量运行时间

java - 无法添加使 JTextArea 在 JScrollPane 内显示多行

java - 如何在 Java CardLayout 中的卡片之间传递值...这次我给出了一个很好的例子

java - JButtons 未显示在 JFrame 上的 JPanel 上

java - Java 中的 2D 变换(平移、旋转、缩放)程序

java - ImageIO 保存回原始大小

java - 在这种情况下,ConcurrentHashMap 和 Synchronized Hash Map 哪个更好?

java - gradle ignoreFailures测试属性

javascript - 将 JavaScript 多维数组转换为 Java 数组

java - 在屏幕上绘制 8x8 矩形变成 9x9 矩形?