当前位置:  开发笔记 > 编程语言 > 正文

用Java计算字符串的显示宽度

如何解决《用Java计算字符串的显示宽度》经验,为你挑选了3个好方法。

如何计算Java中字符串的长度(以像素为单位)?

优选不使用Swing.

编辑:我想使用Java2D中的drawString()绘制字符串,并使用自动换行的长度.



1> Jon Skeet..:

如果您只想使用AWT,则使用Graphics.getFontMetrics(可选地指定字体,对于非默认字体)获取a FontMetrics然后FontMetrics.stringWidth查找指定字符串的宽度.

例如,如果您有一个Graphics名为的变量g,您将使用:

int width = g.getFontMetrics().stringWidth(text);

对于其他工具包,您需要向我们提供更多信息 - 它始终与工具包相关.


如果你提供一个示例用法可能会更清楚,最初我试图将它用作静态方法,因为你已经这样写了.
@Zich:我不确定你说的哪种方法已被弃用 - 据我所知,它们都没有在Java 8文档中被标记为已弃用...
@Zich:这是“图形”中的方法,而不是“ FontMetrics”中的方法。但是您要调用的是`Toolkit.getFontMetrics`,它确实已被弃用,而这并不是该方法所要讨论的……您需要特别注意这种事情,尤其是在开始报告错误之前。 ..

2> Olofu Mark..:

它并不总是需要依赖于工具包,或者并不总是需要使用FontMetrics方法,因为它需要首先获得在Web容器或无头环境中不存在的图形对象.

我在Web servlet中对此进行了测试,它确实计算了文本宽度.

import java.awt.Font;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;

...

String text = "Hello World";
AffineTransform affinetransform = new AffineTransform();     
FontRenderContext frc = new FontRenderContext(affinetransform,true,true);     
Font font = new Font("Tahoma", Font.PLAIN, 12);
int textwidth = (int)(font.getStringBounds(text, frc).getWidth());
int textheight = (int)(font.getStringBounds(text, frc).getHeight());

将必要的值添加到这些维度以创建任何所需的边距.



3> Ed Poor..:

使用以下类中的getWidth方法:

import java.awt.*;
import java.awt.geom.*;
import java.awt.font.*;

class StringMetrics {

  Font font;
  FontRenderContext context;

  public StringMetrics(Graphics2D g2) {

    font = g2.getFont();
    context = g2.getFontRenderContext();
  }

  Rectangle2D getBounds(String message) {

    return font.getStringBounds(message, context);
  }

  double getWidth(String message) {

    Rectangle2D bounds = getBounds(message);
    return bounds.getWidth();
  }

  double getHeight(String message) {

    Rectangle2D bounds = getBounds(message);
    return bounds.getHeight();
  }

}

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有