2012-06-13 60 views
10

के लिए मोनोस्पेस्ड फ़ॉन्ट/प्रतीकों मैं जेटीक्स्टपेन का उपयोग कर कंसोल-जैसी आउटपुट बनाना चाहता हूं।जेटीक्स्टपेन

textpane.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12)); 

यह alphanum के सभी प्रकार के लिए ठीक काम करता है (AZ, 0-9 आदि) वर्ण, लेकिन जब यह जैसे प्रतीकों की बात आती है ' \ u2588' (█: इसलिए मैं एक monospaced फ़ॉन्ट उपयोग कर रहा हूँ), फ़ॉन्ट अब monospaced नहीं है।

क्या मैं कुछ भूल गया था? या क्या कोई मोनोस्पेस्ड फ़ॉन्ट नहीं है जिसमें स्मीबोल शामिल हैं?

उत्तर

10

ठीक है, यह मुझे लगता है जैसे आप यहां कुछ अलग-अलग चीज़ों को संबोधित करने की कोशिश कर रहे हैं, इसलिए मैं उन्हें अलग से संबोधित करने की कोशिश करूंगा।

1. आपको एक ऐसे फ़ॉन्ट की आवश्यकता है जो सभी यूनिकोड वर्णों, प्रतीकों या अन्यथा के लिए monospaced है।

this पृष्ठ के अनुसार, 12886 अल्फान्यूमेरिक और "प्रतीक" वर्ण यूनिकोड 3.2 मानक द्वारा परिभाषित किए गए थे। यूनिकोड अब 6.0 पर है, इसलिए हम शायद मान सकते हैं कि संख्या अब बड़ी है। मैं यह भी मान रहा हूं कि "अल्फान्यूमेरिक" का अर्थ अंग्रेजी वर्ण है, क्योंकि यूनिकोड कई भाषाओं में फैले 100,000 वर्णों का समर्थन करता है। किसी भी दर पर, 12886 अंग्रेजी-मान्यता प्राप्त पात्र और प्रतीकों अभी भी बहुत कम हैं, और मुझे संदेह है कि कई मुफ्त फ़ॉन्ट हैं जो उन सभी का समर्थन करते हैं।

उस ने कहा, मैं अपने अधिकांश जावा अनुप्रयोगों के लिए Courier New का उपयोग कर समाप्त करता हूं, जिसमें चरित्र समर्थन के साथ एक मोनो-स्पेस फ़ॉन्ट की आवश्यकता होती है। यह ऊपर वर्णित '\ u2588' वर्ण के साथ-साथ "डिग्री" प्रतीक जैसे कई अन्य महत्वपूर्ण लोगों का समर्थन करता है।

2. इस मोनो स्थान दिया गया है फ़ॉन्ट "पार मंच"

मैं निश्चित रूप से कह होने की जरूरत है कि मैक ओएस एक्स और Windows समर्थन Courier New के सभी जायके, और मैं करते हैं पर चलने लिनक्स के संस्करण भी (RedHat ... संस्करण संख्या याद नहीं कर सकता), हालांकि सभी लिनक्स संस्करणों में यह फ़ॉन्ट मूल रूप से नहीं है। वैसे भी ... आप Courier New आज़मा सकते हैं और देख सकते हैं कि यह आपके लिए काम करता है या नहीं। यदि नहीं, तो आप फ़ॉन्ट/चरित्र समर्थन का परीक्षण करने के लिए शायद मुफ्त टूल ऑनलाइन देख सकते हैं।

अंतिम विचार

मैं यह कहना नफरत है, लेकिन मुझे शक है वहाँ बाहर कई फोंट कि यूनिकोड मानक द्वारा परिभाषित सभी अक्षरांकीय/प्रतीक वर्णों का समर्थन करते देखते हैं कि, सभी जा रहा मोनो स्थान दिया गया है, पार के कम से कम प्लेटफार्म, और मुफ्त। यदि संभव हो, तो यह जानने के लिए कि आपके लिए निश्चित रूप से किन प्रतीकों की आवश्यकता होगी, यह जानने के लिए आपके समय के लिए अधिक मूल्यवान हो सकता है, फिर उन प्रतीकों का समर्थन करने वाले फ़ॉन्ट का चयन करें और बदले में उन प्लेटफॉर्म द्वारा समर्थित है जिन्हें आप जानते हैं कि आप अपना आवेदन चलाएंगे। यदि आपको पूरी तरह से सभी यूनिकोड प्रतीकों के लिए समर्थन की आवश्यकता है, दुर्भाग्य से, यह शायद मुफ्त में नहीं आएगा।

+0

अल्फानम वर्णों के साथ मेरा मतलब ए-जेड, 0-9 आदि कूरियर न्यू ने मेरे लिए ठीक काम किया। – user28061

+0

मैं एक अच्छा फ्री क्रॉस प्लेटफ़ॉर्म फ़ॉन्ट के लिए स्रोत कोड समर्थक का समर्थन करता हूं। आपको या तो अपने इंस्टॉलर में इसे बंडल करने की आवश्यकता होगी या आपके उपयोगकर्ता इसे मैन्युअल रूप से इंस्टॉल कर लेंगे। https://github.com/adobe-fonts/source-code-pro/releases – Appak

3

मोनोस्पेस्ड फ़ॉन्ट ओएस एक्स पर काम करता है, लेकिन विंडोज नहीं। अजीब चीज यह है कि monospaced को fontconfig.properties के माध्यम से विंडोज पर कूरियर न्यू का उपयोग करने के लिए कॉन्फ़िगर किया गया है।

मैंने वास्तव में ओरेकल के साथ एक बग के रूप में इसे लॉग किया है; यहां कुछ नमूना कोड है जो ओएस एक्स पर सही ढंग से प्रस्तुत करता है लेकिन मोनोस्पेस्ड फ़ॉन्ट विंडोज पर स्क्वायर बॉक्स बनाता है।

import java.awt.BorderLayout; 
import java.awt.Font; 

import javax.swing.JEditorPane; 
import javax.swing.JFrame; 

public class Test { 

    public static void main(String[] args) { 
     JFrame f = new JFrame("editor test"); 
     f.getContentPane().setLayout(new BorderLayout()); 
     f.add(pane("monospaced"), BorderLayout.NORTH); 
     f.add(pane("Courier New"), BorderLayout.SOUTH); 
     f.pack(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setVisible(true); 
    } 

    private static JEditorPane pane(final String name) { 
    JEditorPane p = new JEditorPane(); 
    final Font currFont = p.getFont(); 
    p.setFont(new Font(name, currFont.getStyle(), currFont.getSize())); 
    p.setText(name + " - 8\u1d00.\u1d0d."); 
    return p; 
    } 
} 

मैंने इसे \ u2588 जोड़ने की कोशिश की और यह ओएस एक्स मोनोस्पेस्ड पर भी ठीक दिखता है।