Java获取字体大小

Java获取字体大小,java,swing,fonts,jpanel,jtextarea,Java,Swing,Fonts,Jpanel,Jtextarea,我有一个JFrame,里面有一个JTextArea Font font = new Font("monospaced", Font.PLAIN, 14); textarea.setFont(font); 因为字体是单间距的,所以所有字符的宽度和高度都相同 我想知道这个宽度和高度是多少像素 为此,我可以使用font.getStringBounds,但我没有Graphics上下文传递给它frame.getGraphics()返回null 如何找到角色的大小?如果没有图形实例,是否可以执行此操作?无

我有一个
JFrame
,里面有一个
JTextArea

Font font = new Font("monospaced", Font.PLAIN, 14);
textarea.setFont(font);
因为字体是单间距的,所以所有字符的宽度和高度都相同

我想知道这个宽度和高度是多少像素

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

如何找到角色的大小?如果没有
图形
实例,是否可以执行此操作?无论如何,我不想要它的实例。我只想知道我的字符有多大。

你可以使用
JFrame\getFontMetrics
,因为JFrame的超类之一是
组件

如果这不起作用,您还可以使用
buffereImage
获取
图形
对象:

BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
您可以使用
图像
对象来获取
图形的实例

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

如果这不起作用,您还可以使用
buffereImage
获取
图形
对象:

BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
您可以使用
图像
对象获取
图形
的实例

仅供参考,我正在使用JFrame/JTextarea渲染基于文本的游戏,因此我将使用此信息缩放文本并以字符为单位获取窗口的尺寸

这可能不是最好的方法,最好是简单地使用,并使用基于字体的信息自动确定其首选大小

然后,您可以使用
LayoutManager
api,只需在
JFrame
上调用
pack
,它将根据首选大小围绕内容打包窗口

这也会影响
JScrollPane

仅供参考,我正在使用JFrame/JTextarea渲染基于文本的游戏,因此我将使用此信息缩放文本并以字符为单位获取窗口的尺寸

这可能不是最好的方法,最好是简单地使用,并使用基于字体的信息自动确定其首选大小

然后,您可以使用
LayoutManager
api,只需在
JFrame
上调用
pack
,它将根据首选大小围绕内容打包窗口


这也会影响
JScrollPane

的首选大小。您的问题不清楚,能否提供代码空部分的详细信息。字体“size”将基于渲染目标的上下文。通常,您需要查看
图形#getFontMetrics
或类似的相关方法。如果没有可用的
图形
上下文,可以制作
缓冲区图像
,并使用其。接下来的问题是,你为什么想要这些信息?@MadProgrammer谢谢-我会查看
BufferedImage
。仅供参考,我正在使用
JFrame
/
JTextarea
渲染基于文本的游戏,因此我将使用此信息缩放文本并以字符为单位获取窗口的尺寸。@SamDev
JFrame#getGraphics()
是返回
null
的方法。我在实例化
JFrame
后立即执行此操作。您的问题不清楚,能否提供有关空代码部分的更多信息。字体“size”将基于渲染目标的上下文。通常,您需要查看
图形#getFontMetrics
或类似的相关方法。如果没有可用的
图形
上下文,可以制作
缓冲区图像
,并使用其。接下来的问题是,你为什么想要这些信息?@MadProgrammer谢谢-我会查看
BufferedImage
。仅供参考,我正在使用
JFrame
/
JTextarea
渲染基于文本的游戏,因此我将使用此信息缩放文本并以字符为单位获取窗口的尺寸。@SamDev
JFrame#getGraphics()
是返回
null
的方法。我在实例化
JFrame
后立即执行此操作。不,我说的是JFrame#getFontMetrics不是Graphics#getFontMetrics我还添加了另一种获取图形对象的方法,因为您认为我的答案是错误的,而技术上是正确的,这是基于OP试图做的,这可能不是最好的solution@MadProgrammer
JFrame#getFontMetrics
确实有效。我已经提交了一个编辑来删除答案的其余部分,因为它实际上应该放在一个单独的答案中。如果有人的自定义组件在某些情况下不支持getFontMetrics,我就拒绝了。我说的是JFrame#getFontMetrics而不是Graphics#getFontMetrics我还添加了另一种方式来获取图形对象,因为你认为我的答案是错误的,虽然从技术上讲是正确的,但根据OP的努力,它可能不是最好的solution@MadProgrammer
JFrame#getFontMetrics
确实有效。我已经提交了一个编辑来删除答案的其余部分,因为它实际上应该放在一个单独的答案中。拒绝如果有人的自定义组件在某些情况下不支持getFontMetrics a,我已经尝试使用setRows和setCols,但不幸的是它们没有效果。“我尝试过使用setrow和setCols,但不幸的是它们没有效果“然后还有其他问题,应该调查并解决。@Lolums我以前使用过很多次这种技术,效果很好,正如Andrew所说,如果它不起作用,很可能是因为你在做其他事情。哈,我尝试过使用setRows和setCols,但不幸的是它们没有效果。“我尝试过使用setrow和setCols,但不幸的是它们没有效果”然后是其他错误,应该调查并解决。@Lolums我使用了这个t