当前,我正在开发新的外观,出于多种原因,我必须从头开始。我现在最大的问题是获取具有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字符串视图中预测此冲突,以至少手动处理该大小。
答案 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 />
行的结尾。