2013-09-16 34 views
17

Java'da bir geliştirme ortamı oluşturdum (küçük bir araştırma projesi olarak). Bunun bir parçası olarak, ben şöyle Graphics2D kullanarak metin kendisi çizer özel bir metin bileşeni inşa:Neden java'daki yazı tipleri 1,7'den 1,6'ya kadar farklı?

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

Her şey çalıştı ince ben paketlenmiş kadar (bu Apple tarafından sağlanan varsayalım) 1.6 kullanarak Eclipse şeyler gelişmekte her şey java 1.7'de (Oracle tarafından sağlandı) çalıştı. Açıkçası kalkınma ortamlarında yazı tipleri oldukça önemlidir, bu yüzden sonuçları 1.7'de görmek beni beğenmedi.

enter image description here

Ben özel yazı tipleri ambalaj denedi, ama hepsi grenli ve aşınmış görünür. Yukarıdaki karşılaştırma çok kötü değil, ancak bazı fontlar (Monaco gibi) korkunç görünüyor.

Bunun, Apple'ın bir şeyi kuvarsla nasıl bağladığıyla ilgili olduğunu tahmin ediyorum. Fakat şeyleri iyileştirmenin başka yolu var mı? Bu yüzden diğer sistemlerde korkunç görünmüyor mu? Bunun için bir stratejisi var mı?

güncelle: enter image description here

ve (paintComponent olarak) C yakınlaştırılmış karşılaştırma Monaco (sağda kalan 1.7, 1.6): Bu Monaco karşılaştırmasıdır. Ben kullanarak bir yerel ttf dosyasından yazı tipi yükleme am unutmayın:

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); 

enter image description here

Not Ayrıca, anti aliasing kullanarak açıldıktan:

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
        RenderingHints.VALUE_ANTIALIAS_ON); 
+0

aynı yazı tipini kullanıyor musunuz? –

+1

belki başka bir varsayılan yazı tipi kullanıyorlar? – JohnnyAW

+1

Benzer soru sordu: http://superuser.com/questions/112326/why-do-the-fonts-in-the-java-application-im-running-look-different-in-mac-os-x – Goibniu

cevap

14

Java 6 Apple tarafından geliştirilmiştir. Apple, Quartz/Cocoa ile çalışmasını ve özellikle iyi görünmesini sağlamak için grafik katmanına çok fazla iş çıkardı.

Java 7 için, geliştirme Oracle tarafından devralındı. Bu, Oracle'ın kaynakları Apple'dan aldığı anlamına gelmez. Bunun yerine, başlamışlardır (muhtemelen bazı Unix kodlarını OS X'e taşıyorlar). Bu, Apple'ın Java'ya iyi bakmasını sağlayan tüm işlerin OS X'de iyi bir şekilde kaybolduğu anlamına geliyor.

Apple tasarım hakkında çok şey umurunda. Oracle ... iyi ... pek de değil (exhibit A, exhibit B)

Ne yapabilirsin?

  • OpenJDK'ye bir yama yazın ve gönderin.
  • Apple'dan bir düzeltme eki göndermesini istemeye yetecek kadar insan alın (para yardımcı olabilir).
  • Geri dön Java 6
  • OS X yazı tipi oluşturma motorunu elde etmek için doğrudan Kakao/Quartz'e erişmek için JNI düğmelerini kullanın.

İlgili makaleler:

+1

+1 İki sergi için. – arshajii

+0

İlginç. Oracle'a uygulamalarını vermemek gerçekten anlamsızdır ... – alistair

+1

@alistair: Teknik açıdan bakıldığında haklısınız. Ancak açgözlülük IT'yi devralmaya çalışıyor (bkz. Patent trolleri, Apple ve Samsung arasındaki davalar). Sanırım Oracle, Oracle lisansı verirse Oracle'a bir kopyasını verecekti, ancak Oracle, para kazanamadığı sürece herhangi bir lisans almak istemiyor. Java 7 kopyanız için ne kadar ödediniz? Yani bu bir kilitlenme. –