Java中字符串长度(以像素为单位

有没有办法计算字符串的长度(以像素为单位)给定某个java.awt.Font对象,它不使用任何GUI组件?

那不使用任何GUI组件?

这取决于你在这里的意思。 我假设你的意思是你想要在没有收到HeadlessException情况下这样做。

最好的方法是使用BufferedImage 。 AFAIK,这不会抛出HeadlessException

 Font font = ... ; BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); FontMetrics fm = img.getGraphics().getFontMetrics(font); int width = fm.stringWidth("Your string"); 

除了使用这样的东西,我认为你不能。 您需要一个图形上下文才能创建FontMetrics并为您提供字体大小信息。

您可以使用Graphics2D对象来获取字体边界(包括宽度):

 Graphics2D g2d = ... Font font = ... Rectangle2D f = font.getStringBounds("hello world!", g2d.getFontRenderContext()); 

但这取决于你将如何获得Graphics2D对象(例如来自Image )。

这给了我(137.0,15.09375)的输出。 我不知道单位是什么,但它看起来按比例正确,不直接使用Graphics2D。

  Font f = new Font("Ariel", Font.PLAIN, 12); Rectangle2D r = f.getStringBounds("Hello World! Hello World!", new FontRenderContext(null, RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT, RenderingHints.VALUE_FRACTIONALMETRICS_DEFAULT)); System.out.println("(" + r.getWidth() + ", " + r.getHeight() + ")");