Graphics2d 用部分粗体文本绘制文本

问题描述 投票:0回答:1

我想知道我是否可以制作部分粗体文本例如:

请在7月21号之前交作业

我还没有尝试过任何东西,因为我不知道该怎么做。

这是我目前用于渲染文本的代码:

public void renderText(int page, String text, String font, int fontSize, Color color, int width, int height) {
       final Graphics2D g;
       if (page == 1) {
           g = (Graphics2D) outsideFlyer.getGraphics();
           g.drawImage(outsideFlyer, 0, 0, null);
       } else {
           g = (Graphics2D) insideFlyer.getGraphics();
           g.drawImage(insideFlyer, 0, 0, null);
       }
       if (font == null) {
           g.setFont(new Font(font, Font.PLAIN, fontSize));
       } else if ("bold".equals(font)) {
           g.setFont(new Font(null, Font.BOLD, fontSize));
       } else {
           g.setFont(new Font(font, Font.PLAIN, fontSize));
       }
       g.setColor(color);
       for (String txt : text.split("\n")) {
           g.drawString(txt, width, height += g.getFontMetrics().getHeight());
       }
       g.dispose();
   }

是否可以以某种方式拆分文本? 我很想拥有很多网站上发生的事情,比如介于两者之间的所有内容 * 变得大胆或以某种方式。

java graphics2d
1个回答
0
投票

我遇到了同样的问题。在对其他帖子进行了一些研究之后,我找到了一个解决方案(至少它解决了我的问题)。

首先,据我所知,你不能在同一个字符串中进行,所以你必须将其拆分并分别绘制。

其次,您需要获取第一个字符串在您的场景中占据的宽度/高度(取决于您的情况)。您可以使用您的 Graphics2D 实例来获取它,给定您的字体、字体大小等。然后您可以使用此信息来计算第二个字符串的相应位置。

代码示例:

String plainText = "Please make your assignment before ";
String boldText = "21 of july";
Graphics2D graphics2D = g; //will assume that you already configured it your way
g.setFont(yourPlainFont);
g.drawString(plainText, positionX, positionY);
int plainTextSize = g.getFontMetrics().stringWidth(plainText);
g.setFont(yourBoldFont);
g.drawString(boldText, positionX + plainTextSize, positionY);

请注意,按照 OP 的要求,此示例仅考虑同一行中的文本。你也应该能够在不同的行(高度)上做同样的事情,尽管我没有那样测试。希望对您有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.