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