2017-10-05 148 views
0

我有JFrame其中JTextArea在里面。Java获取字体大小

Font font = new Font("monospaced", Font.PLAIN, 14); 
textarea.setFont(font); 

由于字体是等宽字体,因此所有字符的宽度和高度都相同。

我想知道这个宽度和高度以像素为单位。

为此,我可以使用font.getStringBounds但我没有Graphics上下文传递给它。 frame.getGraphics()返回null

如何查找角色的大小?可以在没有Graphics实例的情况下完成吗?无论如何,我不想要它的一个实例。我只想知道我的角色有多大。

+0

你的问题的首选大小是不明确的,可以为用户提供的代码无效部分的详细信息。 – 2017-10-05 10:31:38

+0

字体“大小”将基于渲染目标的上下文。通常你想看看'Graphics#getFontMetrics'或者其他一些相关的方法。如果您没有可用的'Graphics'上下文,则可以创建'BufferedImage'并使用它。那么问题就变成了一个问题,为什么你需要这些信息呢? – MadProgrammer

+0

@MadProgrammer谢谢,我会研究'BufferedImage'。仅供参考,我使用'JFrame' /'JTextarea'来渲染基于文本的游戏,因此我将使用此信息来缩放文本并以字符为单位获取窗口的尺寸。 – Lolums

回答

1

您可以使用JFrame#getFontMetrics,因为JFrame的超类之一是Component

如果这也不行,你也可以使用BufferedImage获得Graphics对象:

BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); 

可以使用image对象获得的Graphics一个实例。

+0

不,我说的是JFrame#getFontMetrics不是图形#getFontMetrics – Dinh

+0

我还添加了另一种获取图形对象的方法,因为你认为我的回答是错误的 – Dinh

+0

啊,我的坏!你是对的,这似乎工作。 – Lolums

1

仅供参考,我使用一个JFrame/JTextArea中呈现一个基于文本的游戏,所以我将使用此信息为以字符为单位缩放文本和获取窗口的尺寸

这可能不是最好的方法,这将是最好只使用JTextArea#setColumnsJTextArea#setRows,将使用基于字体信息做出决定它的首选大小自动

然后您可以利用LayoutManager API,并简单地调用pack上该JFrame将围绕打包内容的窗口,在此基础上的首选大小

这也将影响JScrollPane

+0

Aha ,我尝试过使用setRows和setCols,但不幸的是它们没有效果。 – Lolums

+0

*“我尝试过使用setRows和setCols,但它们不幸没有任何效果”*然后发生其他错误,应该调查和解决。 –

+0

@Lolums我之前使用过这种技术很多次,并且它工作得很好,就像Andrew所说的那样,如果它不工作,那很可能是因为你正在做的其他事情 – MadProgrammer