अद्यतन - समस्या अब बदसूरत तरीके से हल हो गई है - लेकिन ऐसा करने का एक उचित तरीका होना चाहिए?जावा जेएलएबल एचटीएमएल डिस्प्ले खराब हो जाता है जब फ़ॉन्ट सिस्टम सिस्टम के साथ संघर्ष करता है
मुझे एक कस्टम फ़ॉन्ट में टेक्स्ट को प्रतिपादित करने में समस्याएं आ रही हैं, एचटीएमएल में जेएलएबल में जब फ़ॉन्ट नाम सिस्टम पर पहले से स्थापित फ़ॉन्ट के नाम से संघर्ष करता है।
सिस्टम फ़ॉन्ट एक अलग प्रारूप (ओटीएफ बनाम टीटीएफ) में है, इसलिए आश्चर्यजनक रूप से टेक्स्ट खराब हो गया है।
GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont
पर कॉल करने के लिए फ़ॉन्ट को पंजीकृत करने में विफल होने के लिए झूठा रिटर्न देता है। तो मुझे लगता है कि सवाल यह है कि पंजीकरण के बिना इस फ़ॉन्ट का उपयोग करने का कोई तरीका है, या पंजीकरण करने से पहले इसका नाम बदलने का कोई तरीका है?
मैंने अब टीटीएफ फ़ाइल को संपादित करके और फ़ॉन्ट नाम को मैंगलिंग करके मेरी समस्या हल कर दी है ताकि संघर्ष बहुत ही असंभव हो सके, लेकिन मुझे लगता है कि इस स्थिति को संभालने का एक उचित तरीका होना चाहिए।
package test;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.GraphicsEnvironment;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.JApplet;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
@SuppressWarnings("serial")
class MyComponent extends JPanel {
Font font; String text;
public MyComponent(Font f) {font=f;}
public void initSwing()
{
final String labelcontents = "<html><center>foo</center></html>";
System.out.println(labelcontents);
JLabel text = new JLabel(labelcontents);
text.setFont(font);
add(text,BorderLayout.CENTER);
}
}
@SuppressWarnings("serial")
public class TestApplet extends JApplet {
public void init()
{
Font mainFont = null;
InputStream is = getClass().getResourceAsStream("fonts/Exo-Bold.ttf");
try {
mainFont = Font.createFont(Font.TRUETYPE_FONT, is).deriveFont(24f);
System.out.println(mainFont.getName());
boolean registered=GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(mainFont);
System.out.println("registered "+registered);
} catch (FontFormatException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
final Container fframe = (JComponent)(getContentPane());
final MyComponent component = new MyComponent(mainFont);
Thread t = new Thread(new Runnable() {
public void run() { try {
SwingUtilities.invokeAndWait(new Runnable() {public void run() {
fframe.add(component);
component.initSwing();
fframe.revalidate();
fframe.repaint();
}});
} catch (Exception e) {
e.printStackTrace();
} }
});
t.start();
}
}
कि उपरोक्त कोड में प्रयोग किया जाता है Exo-बोल्ड फ़ॉन्ट कर सकते हैं - - उदाहरण के लिए से http डाउनलोड किया जा। कॉम/घ/5755/exo.zip? –
मुझे अब इसके स्रोत को याद नहीं है लेकिन यह एक मुफ्त फ़ॉन्ट संग्रह –
से था शायद आप अपनी फ़ॉन्ट फ़ाइल साझा कर सकते हैं? क्या आप एक डिफ़ॉल्ट फ़ॉन्ट के लिए एक ही समस्या देखते हैं? –