为什么java 1.7中的字体与1.6不同?
我一直在用Java构建一个开发环境(作为一个小型研究项目)。作为其中的一部分,我构建了一个自定义文本组件,该组件使用Graphics2d绘制文本本身,如下所示:
g2.drawString("some text", 100, 100);
使用1.6在Eclipse中开发东西一切都很好(我假设这是由Apple提供的),直到我把所有东西打包起来并在java 1.7(由Oracle提供)中运行。显然,在开发环境中,字体非常重要,因此我不高兴看到1.7中的结果。
我尝试过打包自定义字体,但它们都显得颗粒状和侵蚀。上面的比较不是太糟糕,但有些字体(如摩纳哥)看起来很糟糕。
我猜这与苹果如何将事物与Quartz挂钩有关。但是有没有办法改进事情,这样在其他系统上看起来就不会很糟糕?有人对此有策略吗?
更新:这是摩纳哥的比较:
以及摩纳哥C(在paintComponent中)的放大比较(左侧为1.7,右侧为1.6)。请注意,我正在使用以下命令从本地ttf文件加载字体:
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("monaco.ttf");
Font customFont = null;
try
{
customFont = Font.createFont(Font.TRUETYPE_FONT, is);
customFont = customFont.deriveFont(16.0f).deriveFont(Font.BOLD);
is.close();
ge.registerFont(customFont);
} catch (FontFormatException e1)
{
e1.printStackTrace();
} catch (IOException e1)
{
e1.printStackTrace();
}
this.setFont(customFont);
另请注意,使用以下命令打开抗锯齿功能:
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);