簡體   English   中英

為什么java 1.7中的字體與1.6不同?

[英]Why are fonts in java 1.7 different to 1.6?

我一直在用Java構建開發環境(作為一個小型研究項目)。 作為其中的一部分,我構建了一個自定義文本組件,使用Graphics2d繪制文本本身,如下所示:

g2.drawString("some text", 100, 100);

使用1.6(我假設這是由Apple提供),所有東西都在Eclipse中很好地開發,直到我打包並運行java 1.7(由Oracle提供)。 顯然在開發環境中字體非常重要,所以我很不高興看到1.7中的結果。

在此輸入圖像描述

我嘗試過包裝自定義字體,但它們都顯得粗糙和腐蝕。 上面的比較並不算太差,但有些字體(如摩納哥)看起來很糟糕。

我猜這與Apple如何將事物掛鈎到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);

Java 6由Apple開發。 Apple在圖形層中投入了大量精力,使其與Quartz / Cocoa一起使用,尤其是使其看起來更好。

對於Java 7,開發由Oracle接管。 這並不意味着Oracle從Apple獲得了消息來源。 相反,他們重新開始(可能將一些Unix代碼移植到OS X)。 這意味着Apple在OS X上使Java看起來很好的所有工作基本上都失敗了。

Apple非常關心設計。 甲骨文......嗯......沒那么多( 展覽A展覽B

你能做什么?

  • 編寫並向OpenJDK提交補丁。
  • 讓足夠多的人關心要求Apple提交補丁(金錢可能有所幫助)。
  • 回到Java 6
  • 使用JNI直接訪問Cocoa / Quartz,以便獲得OS X字體渲染引擎。

相關文章:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM