2009-04-05 14 views
5

में जापानी वर्णों को प्रदर्शित करने के लिए कैसे जापानी वर्ण प्रदर्शित करते समय JTextArea का अजीब व्यवहार है - मुझे कांजी के बजाए जाने-माने रिक्त आयत मिलते हैं। सबसे अजीब चीज यह है कि JTextField उन्हें पूरी तरह प्रदर्शित करता है (दोनों मामलों में मैं "ताहोमा" फ़ॉन्ट परिवार का उपयोग करता हूं)। इसके अलावा, अगर मैं इस कोड डाल:JTextArea

Font f = new Font("123", Font.PLAIN, 12); // This font doesn't exists 
    problemTextArea.setFont(f); 

... इससे पहले कि मैं problemTextArea को जापानी स्ट्रिंग लिखने यह कांजी को प्रदर्शित करता है!

पीएस मेरी अंग्रेजी के लिए खेद है।

Upd: मैं Windows

+0

आप किस प्लेटफ़ॉर्म का उपयोग कर रहे हैं? विंडोज? लिनक्स? – Peter

उत्तर

10

समस्या का उपयोग कर रहा है कि JTextArea JTextField तुलना में एक अलग डिफ़ॉल्ट फ़ॉन्ट का उपयोग करता है। मुझे एक ऐसे ऐप्लिकेशन में एक ही समस्या थी जिसे मैंने लिखा था जिसे बहु-भाषाओं का समर्थन करना था।

आपकी समस्या के लिए कारण यह है कि आम तौर पर ऐसे JTextArea कूरियर न्यू रूप में एक मोनो स्थान दिया गया है फ़ॉन्ट, दिखाने के लिए इस्तेमाल किया जाता है। आम तौर पर जावा में कांजी प्रदर्शित करने के लिए एक मोनो-स्पेस ग्राफिकल फ़ॉन्ट के लिए कोई अतिरिक्त मैपिंग नहीं होती है।

आपके द्वारा तय किया गया फ़िक्स, क्योंकि "123" नामक कोई फ़ॉन्ट नहीं है, इसलिए डिफ़ॉल्ट लिया जाता है (संवाद)। "संवाद" फ़ॉन्ट को आपके प्लेटफॉर्म की font.properties फ़ाइल में एक फ़ॉन्ट परिवार में आंतरिक रूप से मैप किया गया है। यह वही फ़ॉन्ट होगा जो JTextField का उपयोग करता है।

मैं यह सुनिश्चित करना है कि एक ही फॉन्ट परिभाषा सभी चित्रमय घटकों में प्रयोग किया जाता है, तो निम्न ठीक है। आप JTextArea के लिए विशिष्ट कुंजी भी ढूंढ सकते हैं और इसे बदल सकते हैं। इस तरह आपको किसी भी घटक के फोंट के बारे में चिंता करने की ज़रूरत नहीं है, उन्हें संवाद के साथ शुरू किया जाएगा।

Object fontDefinition = new UIDefaults.ProxyLazyValue("javax.swing.plaf.FontUIResource", null, new Object[] { "dialog", new Integer(Font.PLAIN), new Integer(12) }); 

java.util.Enumeration keys = UIManager.getDefaults().keys(); 
while (keys.hasMoreElements()) { 
    Object key = keys.nextElement(); 
    Object value = UIManager.get(key); 
    if (value instanceof javax.swing.plaf.FontUIResource) { 
     UIManager.put(key, fontDefinition); 
    } 
} 
संबंधित मुद्दे