我想知道我是否可以制作部分粗体文本例如:
请在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();
}
是否可以以某种方式拆分文本? 我很想拥有很多网站上发生的事情,比如介于两者之间的所有内容 * 变得大胆或以某种方式。
我遇到了同样的问题。在对其他帖子进行了一些研究之后,我找到了一个解决方案(至少它解决了我的问题)。
首先,据我所知,你不能在同一个字符串中进行,所以你必须将其拆分并分别绘制。
其次,您需要获取第一个字符串在您的场景中占据的宽度/高度(取决于您的情况)。您可以使用您的 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 的要求,此示例仅考虑同一行中的文本。你也应该能够在不同的行(高度)上做同样的事情,尽管我没有那样测试。希望对您有所帮助。