除非从NetBeans运行,否则Java Canvas drawString不会使用粗体文本

时间:2018-06-02 23:14:19

标签: java canvas fonts awt

我在Java Canvas上制作了一个在线多人游戏(没什么太复杂,只是一个自上而下的坦克射击游戏)。你会认为我在这里询问有关网络的东西,插座等等,但是我比这更远,而且我遇到了一些奇怪的东西。

基本上,我在画布上用粗体字体绘制了一些字符串。当我从NetBeans运行它时(不构建,只需按F6 /绿色运行按钮),文本显示为粗体。但是,当我构建项目并运行JAR文件时,文本不是粗体。

注意:

  • 我尝试更新Java,因为我背后有很多更新。没有解决它。

这是一段代码片段,表明我正在正确绘制粗体文字,但我不知道还需要为此类问题展示什么,因为代码可能不是问题

g.setFont(new Font("TimesRoman", Font.BOLD, 50));
g.setColor(Color.red);
g.drawString("Connection Failed.", x, y);

TL; DR - 在运行JAR文件时,在画布上绘制粗体文本不是粗体,而是从NetBeans运行时。

感谢所有帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

看起来您可能在绘画功能中创建了一个Font。鉴于绘制函数可能每秒被调用几次,这可能是源效率低下,并且可能是资源不足。在创建类时创建字体,可能作为静态资源,然后在每个绘制调用中使用相同的字体对象。

当以效率的名义绘制对象时,允许Graphics对象获取快捷方式。这可能包括不加粗大字体,不使用对角线上的抗锯齿等。速度是王道。当然,您可以使用Graphics2D.setRendingHint(...)

告诉图形引擎您更关注外观而不是速度
import static java.awt.RenderingHints.*;

void paint(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;

    g2d.setRendingHint(KEY_RENDERING, VALUE_RENDERING_QUALITY);
    g2d.setRendingHint(KEY_TEXT_ANTIALIAS, VALUE_TEXT_ANTIALIAS_ON);

您可以使用setRendingHints(Map hints)一次设置多个提示。