5

如何String在Java中计算以像素为单位的宽度?例如,我有一个字符串说“Hello World!”。它的像素长度是多少,还要考虑它的字体系列和大小?

4

5 回答 5

4

简而言之:问题取决于您使用的框架。例如,如果您使用 AWT,并且有一个Graphicsobjectgraphics和一个Fontobject ,font您可以执行以下操作:

FontMetrics metrics = graphics.getFontMetrics(font);
int width = metrics.stringWidth("Hello world!");

查看以获取更多信息。

于 2013-08-20T05:57:34.473 回答
2

你可以试试这样的

Graphics2D g2d = ...
Font font = ...
Rectangle2D r = font.getStringBounds("hello world!", g2d.getFontRenderContext());
System.out.println("(" + r.getWidth() + ", " + r.getHeight() + ")");

请参阅此文档,可能会对您有所帮助。

于 2013-08-20T05:57:41.840 回答
1

根据您想要实现的目标,有多种方法可以实现您想要的目标,例如...

BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
FontMetrics fm = g2d.getFontMetrics();
System.out.println(fm.stringWidth("This is a simple test"));
g2d.dispose();

但这仅BufferedImage与它的Graphics上下文相关,它不会转化为屏幕或打印机之类的东西。

但是,只要您有Graphics上下文,就可以获得相同的结果。

显然,此示例使用为Graphics上下文安装的默认字体,如果需要,您可以更改...

于 2013-08-20T06:00:25.407 回答
0

您可以使用FontMetrics。FontMetrics 类定义了一个字体度量对象,它封装了有关在特定屏幕上呈现特定字体的信息。

您可以执行以下操作

    Font font = new Font("Verdana", Font.PLAIN, 10);  
    FontMetrics metrics = new FontMetrics(font) {  
    };  
    Rectangle2D bounds = metrics.getStringBounds("Hello World!", null);  
    int widthInPixels = (int) bounds.getWidth(); 
于 2013-08-20T06:00:59.197 回答
0

有几种方法可以做到这一点,label.getElement().getClientWidth();如果文本在标签中,您可以尝试,如果您使用的是 AWT,则可以Graphics.getFontMetrics使用FontMetrics.stringWidth

于 2013-08-20T05:58:39.557 回答