2012-07-03 12 views
16

के लिए गलत बस (आश्चर्यजनक ;-) कारण है कि क्षुधा मेरी win6 + मशीनों (Vista और Win7 के लिए एक ही पर इतना तंग देखो, दोनों 120dpi की स्थापना, jdk6 साथ देखा और jdk7): नियंत्रण फ़ॉन्ट डेस्कटॉप संपत्ति से ऊपर देखा दोनों गलत फ़ॉन्ट परिवार और गलत आकार है:बग या सुविधा: स्विंग डिफ़ॉल्ट GUI फ़ॉन्ट Win6 +

public static void main(String[] args) { 
    Font guiFont = (Font) Toolkit.getDefaultToolkit().getDesktopProperty("win.defaultGUI.font"); 
    int guiSize = guiFont.getSize(); 
    Font iconFont = (Font) Toolkit.getDefaultToolkit().getDesktopProperty("win.icon.font"); 
    System.out.println("gui default: " + guiFont + "\nicon default: " + iconFont); 
} 

उत्पादन:

gui default: java.awt.Font[family=Tahoma,name=Tahoma,style=plain,size=13] 
icon default: java.awt.Font[family=Segoe UI,name=Segoe UI,style=plain,size=15] 

बाद, लगभग सभी पाठ के लिए देशी अनुप्रयोगों में प्रयोग किया जाता है, जबकि स्विंग पूर्व का उपयोग करता है ...

प्रश्न:

  • क्या इसके लिए कोई कारण हो सकता है, या सिर्फ एक बग?
  • कौन जिम्मेदार है: स्विंग देखने (जब पढ़ने-में प्रासंगिक सिस्टम संसाधनों से desktopProperty) या इसे सही ढंग से रिपोर्टिंग नहीं में ओएस?
  • उत्तरार्द्ध के उपयोग को कैसे बल देना है? पिछले हल करने के लिए

विकल्प:

  • एलएएफ एक के बारे में पूर्ण नियंत्रण के साथ सभी प्रासंगिक पाठ फोंट स्थापित करने के लिए विचार कर सकते हैं (कि क्या JGoodies करता है, एक FontPolicy/सेट तरीके पर निर्भर करता है)।
  • एक गंदा हैक सही मान को defaultGUI डेस्कटॉप संपत्ति का मूल्य निर्धारित करने के लिए है - यह टूलकिट है, जो स्वाभाविक रूप से सुरक्षा विवश संदर्भों में उड़ा देंगे चिंतनशील पहुंच शामिल है।
  • ??

संपादित

शायद ज़रुरत पड़े किसी को दिलचस्पी है, यहां गंदा हैक है:

/** 
* Replaces the default gui desktop font property with the icon font 
* if the former is smaller. 
* 
*/ 
public static void ensureDefaultGUIFontSize() { 
    Toolkit toolkit = Toolkit.getDefaultToolkit(); 
    Font guiFont = (Font) toolkit.getDesktopProperty("win.defaultGUI.font"); 
    Font iconFont = (Font) toolkit.getDesktopProperty("win.icon.font"); 
    if (guiFont.getSize() < iconFont.getSize()) { 
     invokeDeclaredMethod("setDesktopProperty", Toolkit.class, 
      toolkit, "win.defaultGUI.font", iconFont); 
    } 
} 

private static void invokeDeclaredMethod(String methodName, 
     Class<?> clazz, Object instance, String propertyName, 
     Object propertyValue) { 
    try { 
     Method method = clazz.getDeclaredMethod(methodName, String.class, Object.class); 
     method.setAccessible(true); 
     method.invoke(instance, propertyName, propertyValue); 
    } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { 
     LOG.finer("forcing desktop property failed " + e.getStackTrace()); 
    } 

} 

संपादित 2

बस स्पष्ट करने के लिए: हैक केवल पूरी तरह से प्रभावी है विंडोजएलएफ़ के लिए। निम्बस पूरी तरह से सिस्टम सेटिंग्स को अनदेखा करता है, धातु आंशिक रूप से: बाद वाला फ़ॉन्ट हमेशा संवाद होता है, केवल डेस्कटॉप प्रॉपर्टीज से आकार लिया जाता है। आधा रास्ता अच्छा लगता है, लेकिन यह नहीं है: मानचित्रण मुख्य फोंट के लिए अजीब है, f.i. बड़ी मात्रा में प्रयोग controlFont आकार Windows UI में "win.ansiVar.font.height" (जो जीवाश्म बचे हुए है?) जो मेरे मशीन पर 13 है ...

संपादित करने के लिए सेट कर दिया जाता 3

भी , हैक है ... सीमाओं के साथ एक हैक, फाई @ वाल्टर की टिप्पणी में उल्लिखित:

यह बग विशेष रूप से ध्यान देने योग्य है जब आप विंडोज यूआई स्केल करते हैं। एफवाईआई, एक जेफाइल कूसर खोलने से हैक वापस आ जाता है।इसके अलावा JTree/JTable पंक्ति की ऊँचाई स्वचालित रूप से नए फ़ॉन्ट आकार के लिए अद्यतन नहीं किया जाएगा और

+0

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4950968 - अनुमान है कि वर्कअराउंड नए विंडोज –

+0

@ वाल्टरलान हम्म के साथ काम नहीं करता है ... क्या पुराने वर्कअराउंड को उम्र के लिए प्रतिस्थापित नहीं किया जाना चाहिए, यह एमएस सैन्स बनाम ताहोमा बग से पहले भी था: http: //bugs.sun। com/bugdatabase/view_bug.do? bug_id = 5,079,742। सबसे हाल ही में मुझे यह पता चल सकता है कि http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6436509 जो पुन: उत्पन्न नहीं होता है (सच है, क्योंकि 0/null चला गया है लेकिन अब सही नहीं है मूल्य ...) – kleopatra

+2

विंडोज के बजाय ओएस एक्स पर स्विच करने का सुझाव शायद सहायक नहीं है :-) – Robin

उत्तर

4

मुझे लगता है कि एक बग लेकिन Win7 के और विषयों built_in बुनियादी संपत्ति नहीं है तो आप अपने माउस पैमाने पर करने के रूप में अच्छी तरह की आवश्यकता होगी, फ़ॉन्ट का दिलचस्प आकार, मैं अभी भी छोटे फ़ॉन्ट्स (ओएस instalation से डिफ़ॉल्ट सेटिंग)

उदाहरण के लिए

का उपयोग करता है, तो मैं सेट/स्विच

1.Windows7 बेसिक विषय

gui default: java.awt.Font[family=Tahoma,name=Tahoma,style=plain,size=11] 
icon default: java.awt.Font[family=Segoe UI,name=Segoe UI,style=plain,size=12] 

2.Windows7 क्लासिक विषय

gui default: java.awt.Font[family=Tahoma,name=Tahoma,style=plain,size=11] 
icon default: java.awt.Font[family=Tahoma,name=Tahoma,style=plain,size=11] 

don't touched the Font property, will be continue for from WinXP 

3.WindowXP संशोधित विषय

gui default: java.awt.Font[family=Tahoma,name=Tahoma,style=plain,size=11] 
icon default: java.awt.Font[family=Tahoma,name=Tahoma,style=plain,size=13] 

4.Windows7 क्लासिक थीम

gui default: java.awt.Font[family=Tahoma,name=Tahoma,style=plain,size=11] 
icon default: java.awt.Font[family=Tahoma,name=Tahoma,style=plain,size=11] 
+0

परीक्षण के लिए धन्यवाद :-) सभी गैर क्लासिक विषयों के लिए डिफ़ॉल्ट मूल फ़ॉन्ट SegoeUI, IMO है (UXGuide, पीडीएफ संस्करण http://www.microsoft.com/en-us/download/details.aspx पर देखें? आईडी = 26 9 5) वास्तव में जब मैं सेगो को मजबूर स्विंग टेक्स्ट के खिलाफ देशी ऐप्स में पाठ की तुलना करता हूं तो वास्तव में दिखा रहा है। – kleopatra

संबंधित मुद्दे