目前我正在开发一种新的外观和感觉,我不得不从头开始有很多原因,我现在最大的问题是在具有getText()
的组件中获取String的宽度和高度以确定应该在哪里绘制,我知道如何获取正常文本,但如果它呈现为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
方法,但仍然是相同的。我搜索了很多关于它但我找不到任何相关结果,我什么都没用什么类,我不能使用TextLayout
有时JComponent
可能不是JTextComponent
。请帮助,谢谢。
编辑
这似乎是一个真正的半不可能的事情,因为另一个解决方案我会与View.getPreferredSpan(int axsis)
达成一致,但是有时候缩放尺寸是不可靠的,我的意思是在组件中我们可以预测这种冲突但是如何预测这在html字符串中绘制了BasicHTML
视图,以至少手动处理大小。
我已经20多年没试过了,但是由于JLabel会接受html,尝试使用你的html文本创建一个JLabel,然后获得标签的首选大小。
遗憾地搜索整个网络,没有任何令人满意的答案真正的问题
如何在呈现为HTML时获取String的大小?
但是编辑后如何获得视图的实际大小和首选大小之间的差异的另一个问题
View.getPreferredSpan(int axsis);
如果文本是,则返回大小将给出键入内容的大小而不是绘制的内容的大小
<html>
<body>
first line<br />
second line <hr />
third line
</body>
</html>
它会使用的大小
View.getPreferredSpan(int axsis);
获取第一,第二和第三行句子的文本大小,但它将使用Rectangle
参数来确定<hr />
行的结束。