Java图形字体-如何确保文本保持在一行中



使用Graphics2D,我想在图像中显示一个文本,但我希望它显示在一行中。这意味着,如果文本比图像长,则的大小将减小(调整)

我该怎么办?

到目前为止,我是这样做的,但我确信这真的很糟糕。

int fontSize = 66;
FontRenderContext frc = new FontRenderContext(null, true, true);
element = null;
do { // we turn until the size goes into the image
    fontSize -= 2;
    layout = new TextLayout(myText, new Font(font, Font.BOLD, fontSize), frc);
    element = layout.getPixelBounds(null, 0, 0);
    if (fontSize <= 12) {
        throw new Exception ("Title too long.");
    }
} while(element.width > image.getWidth());

我该怎么办?

谢谢你的帮助。

当将文本放在特定显示的圆圈内时,我也不得不做同样的事情。你唯一可以做得更好的是,不要把搜索变成线性搜索,而是把它变成二进制搜索。这将使您获得更好的整体性能。除此之外,您的方法还不错——我认为这与您在Java中将文本调整为特定屏幕尺寸时所能做到的一样好。

还有一些编码语义问题——如果在常规while循环中进行,这可能会更可读。

另一个问题是您抛出的异常。最好把它放在一个函数中,该函数返回一些值,指示文本是否可以绘制在特定的图像上。如果在使用简单的条件语句时可以获得相同的行为,那么使用抛出的异常来确定程序逻辑从来都不是一件好事。

最新更新