मेरे सर्वोत्तम ज्ञान के लिए, एडब्ल्यूटी एपीआई अंतर्निहित फ़ॉन्ट जानकारी का खुलासा नहीं करता है। यदि आप इसे प्राप्त कर सकते हैं, तो मैं उम्मीद करता हूं कि यह कार्यान्वयन पर निर्भर हो। निश्चित रूप से, दो जेआरई lib निर्देशिकाओं में फ़ॉन्ट मैपिंग फ़ाइलों की तुलना, मैं देख सकता हूं कि उन्हें लगातार तरीके से परिभाषित नहीं किया गया है।
आप अपने फोंट लोड कर सकते हैं, लेकिन यह आपको थोड़ा कचरा लगता है, क्योंकि आपको पता है कि प्लेटफार्म आपको क्या चाहिए।
यह एक हैक है कि एक JRE फॉन्ट लोड करता है:
private static Font loadMonospacedFont(Display display) {
String jreHome = System.getProperty("java.home");
File file = new File(jreHome, "/lib/fonts/LucidaTypewriterRegular.ttf");
if (!file.exists()) {
throw new IllegalStateException(file.toString());
}
if (!display.loadFont(file.toString())) {
throw new IllegalStateException(file.toString());
}
final Font font = new Font(display, "Lucida Sans Typewriter", 10,
SWT.NORMAL);
display.addListener(SWT.Dispose, new Listener() {
public void handleEvent(Event event) {
font.dispose();
}
});
return font;
}
यह आईबीएम/Win32/JRE1.4, सूर्य/Win32/JRE1.6, सूर्य/लिनक्स/JRE1.6 पर काम करता है, लेकिन है एक सुंदर नाजुक दृष्टिकोण। I18N के लिए आपकी ज़रूरतों के आधार पर, यह भी परेशानी हो सकती है (मैंने चेक नहीं किया है)।
एक और हैक फोंट मंच पर उपलब्ध परीक्षण करने के लिए किया जाएगा:
public class Monotest {
private static boolean isMonospace(GC gc) {
final String wide = "wgh8";
final String narrow = "1l;.";
assert wide.length() == narrow.length();
return gc.textExtent(wide).x == gc.textExtent(narrow).x;
}
private static void testFont(Display display, Font font) {
Image image = new Image(display, 100, 100);
try {
GC gc = new GC(image);
try {
gc.setFont(font);
System.out.println(isMonospace(gc) + "\t"
+ font.getFontData()[0].getName());
} finally {
gc.dispose();
}
} finally {
image.dispose();
}
}
private static void walkFonts(Display display) {
final boolean scalable = true;
for (FontData fontData : display.getFontList(null, scalable)) {
Font font = new Font(display, fontData);
try {
testFont(display, font);
} finally {
font.dispose();
}
}
}
public static void main(String[] args) {
Display display = new Display();
try {
walkFonts(display);
} finally {
display.dispose();
}
}
}
यह शायद एक अच्छा दृष्टिकोण यह आप मुद्दों स्थान में उजागर छोड़ सकते हैं के रूप में नहीं है। इसके अलावा, आप नहीं जानते कि पहले मोनोस्पेस्ड फ़ॉन्ट जो आप पार करते हैं वह कुछ विंडिंग्स आइकन सेट नहीं है।
सबसे अच्छा तरीका सिर्फ फ़ॉन्ट/लोकेल मैपिंग श्वेतसूची के आधार पर अपना सर्वश्रेष्ठ अनुमान लगाने के लिए हो सकता है और यह सुनिश्चित कर लें कि उपयोगकर्ता FontDialog के माध्यम से स्वयं को उपयुक्त बनाने के लिए आसानी से यूआई को फिर से कॉन्फ़िगर कर सकें।
यह भी java.awt.Font.MONOSPACED – nos
के रूप में ऐसा लगता है कि वे एक [SWTFontUtils] (https://bugs.eclipse.org/bugs/attachment.cgi?id=238603) वर्ग प्रदान की उपलब्ध होना चाहिए अभी इसके लिए – Campa