目前我正在开发新的外观和感觉,由于多种原因我必须从头开始,我现在最大的问题是获取具有 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/