首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java drawString限制?

Java drawString限制?
EN

Stack Overflow用户
提问于 2015-02-05 16:09:44
回答 2查看 1.1K关注 0票数 0

我想要绘制一个具有特定维度/边界的字符串。

我知道如何画字符串,我知道如何测量字符串,这是一个经常被问到的问题。我还知道在不同的操作系统上对Java的不同dpi处理,并且我知道Java根据您所绘制的Graphics2D对象的维度调整字符串大小。

我想做这样的事情:

代码语言:javascript
复制
graphics2d.drawString("Hello World", width, height);

(当然,上面的示例将显示位置、宽度和高度的文本)。

有什么有效的方法来做我想做的事吗?

我还找到了一个非常低效率的解决方案来解决我的问题:

  1. 创建目标屏幕/窗口大小的图像
  2. 测量此图像图形对象中的文本
  3. 渲染文本
  4. 创建文本区域的子图像。

谢谢您抽时间见我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-05 17:14:55

在社区的友好帮助下,我写了这个方法。我添加了一些评论,以表明(呃)没有张贴全班。有人对我感兴趣,我可以把全班都贴出来。

代码语言:javascript
复制
/**
 * Renders a string to a translucent image and returns it
 * @param string the text, like "Hello World"
 * @param size an enum, like SMALL, MIDDLE, LARGE
 * @param graphics the graphics of the scene, used for measuring the string-dimension
 * @return
 */
public BufferedImage renderTextToImage(String string, Size size, Color color, Graphics graphics) {
    Vector2 imageDimension = this.getFontDimensionPixels(string, size, graphics); // helper which measures string using fontmetrics
    BufferedImage returnImage = new BufferedImage(
            Max.maxInt((int)imageDimension.getX(), 1), // Max.maxInt() is a little helper to get the bigger out of two values
            Max.maxInt((int)imageDimension.getY(), 1),
            Transparency.TRANSLUCENT);
    Graphics2D returnGraphics = returnImage.createGraphics();
    returnGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    returnGraphics.setFont(this.getFont(size));
    returnGraphics.setColor(color);
    returnGraphics.drawString(string, 0, returnImage.getHeight() * 0.8f);
    returnGraphics.dispose();
    return returnImage;
}
票数 0
EN

Stack Overflow用户

发布于 2015-02-05 16:44:24

Java JLabel通过调用ui.getPreferredSize(this)来确定它们的首选大小。通常,标签的ui是BasicLabelUI,它内部使用java.awt.FontMetrics计算绘制字符串所需的宽度。

由于FontMetrics的接口非常容易,所以您可能应该使用它,而不是尝试双重呈现字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28348706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档