Java获取字体大小
我有JFrame
其中JTextArea
在里面。Java获取字体大小
Font font = new Font("monospaced", Font.PLAIN, 14);
textarea.setFont(font);
由于字体是等宽字体,因此所有字符的宽度和高度都相同。
我想知道这个宽度和高度以像素为单位。
为此,我可以使用font.getStringBounds
但我没有Graphics
上下文传递给它。 frame.getGraphics()
返回null
。
如何查找角色的大小?可以在没有Graphics
实例的情况下完成吗?无论如何,我不想要它的一个实例。我只想知道我的角色有多大。
您可以使用JFrame#getFontMetrics
,因为JFrame的超类之一是Component
。
如果这也不行,你也可以使用BufferedImage
获得Graphics
对象:
BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
可以使用image
对象获得的Graphics
一个实例。
仅供参考,我使用一个JFrame/JTextArea中呈现一个基于文本的游戏,所以我将使用此信息为以字符为单位缩放文本和获取窗口的尺寸
这可能不是最好的方法,这将是最好只使用JTextArea#setColumns
和JTextArea#setRows
,将使用基于字体信息做出决定它的首选大小自动
然后您可以利用LayoutManager
API,并简单地调用pack
上该JFrame
将围绕打包内容的窗口,在此基础上的首选大小
这也将影响JScrollPane
Aha ,我尝试过使用setRows和setCols,但不幸的是它们没有效果。 – Lolums
*“我尝试过使用setRows和setCols,但它们不幸没有任何效果”*然后发生其他错误,应该调查和解决。 –
@Lolums我之前使用过这种技术很多次,并且它工作得很好,就像Andrew所说的那样,如果它不工作,那很可能是因为你正在做的其他事情 – MadProgrammer
你的问题的首选大小是不明确的,可以为用户提供的代码无效部分的详细信息。 – 2017-10-05 10:31:38
字体“大小”将基于渲染目标的上下文。通常你想看看'Graphics#getFontMetrics'或者其他一些相关的方法。如果您没有可用的'Graphics'上下文,则可以创建'BufferedImage'并使用它。那么问题就变成了一个问题,为什么你需要这些信息呢? – MadProgrammer
@MadProgrammer谢谢,我会研究'BufferedImage'。仅供参考,我使用'JFrame' /'JTextarea'来渲染基于文本的游戏,因此我将使用此信息来缩放文本并以字符为单位获取窗口的尺寸。 – Lolums