मैंने ओएस एक्स से विंडोज़ में अपने स्विंग ऐप को पोर्ट करना शुरू कर दिया है और JLabel
एस के साथ चीजें दर्दनाक हैं।जेएलएबल एचटीएमएल टेक्स्ट सेट अनदेखा करता है
मैंने देखा है कि setFont
पर निर्दिष्ट फ़ॉन्ट को अनदेखा किया गया है यदि लेबल का टेक्स्ट HTML है (यह मैक पर नहीं होता है)। एचटीएमएल स्वरूपण जटिल प्रदर्शनों पर पठनीयता के लिए बेहद उपयोगी है।
सामान्य परिस्थितियों में मैं एक HTML टैग में फ़ॉन्ट निर्दिष्ट करता हूं, लेकिन जिस फ़ॉन्ट का मैं उपयोग कर रहा हूं उसे Font.createFont
का उपयोग कर जेआर के बाहर एक टीटीएफ के साथ रनटाइम पर लोड किया जाता है। मैंने फ़ॉन्ट टैग में लोड किए गए फ़ॉन्ट का नाम उपयोग करने का प्रयास किया, लेकिन यह काम नहीं किया।
क्या कोई तरीका है कि मैं लोड किए गए awt.Font
का उपयोग विंडोज पर एक HTML- ified JLabel
के साथ कर सकता हूं?
यहां एक उदाहरण है। मैं अपने आवेदन के फ़ॉन्ट साझा नहीं कर सकते, लेकिन मैं तो बस इस एक (एक शुद्ध टीटीएफ) और एक ही व्यवहार के साथ यह भाग गया होता है:
http://www.dafont.com/sophomore-yearbook.font
import java.awt.Font;
import java.io.File;
import javax.swing.*;
public class LabelTestFrame extends JFrame {
public LabelTestFrame() throws Exception {
boolean useHtml = true;
String fontPath = "C:\\test\\test_font.ttf";
JLabel testLabel = new JLabel();
Font testFont = Font.createFont(Font.TRUETYPE_FONT, new File(fontPath)).deriveFont(18f);
testLabel.setFont(testFont);
if (useHtml) testLabel.setText("<html>Some HTML'd text</html>");
else testLabel.setText("Some plaintext");
getContentPane().add(testLabel);
setSize(300,300);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {new LabelTestFrame().setVisible(true);}
catch (Exception e) {e.printStackTrace();}
}
});
}
}
संपादित करें: काफी दिलचस्प है, अगर मैं किसी एक का उपयोग जेआरई के जेआरई के लिब/फोंट फ़ोल्डर से टीटीएफ (इस मामले में लुसीडा फ़ॉन्ट्स में से एक का नाम बदलकर test_java.ttf में बदल दिया गया है) यह स्निपेट बूलियन के साथ समान परिणाम उत्पन्न करता है।
public LabelTestFrame() throws Exception {
boolean useHtml = false;
String fontPath = "C:\\test\\test_java.ttf";
JLabel testLabel = new JLabel();
Font testFont = Font.createFont(Font.TRUETYPE_FONT, new File(fontPath)).deriveFont(18f);
testLabel.setFont(testFont);
if (useHtml) testLabel.setText("<html><b>Some HTML'd text</b></html>");
else testLabel.setText("Some plaintext");
getContentPane().add(testLabel);
setSize(300,300);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {new LabelTestFrame().setVisible(true);}
catch (Exception e) {e.printStackTrace();}
}
});
}
संपादित करें 2: विधि यहाँ डिफ़ॉल्ट सेटिंग JLabel फ़ॉन्ट के लिए वर्णित बिल्कुल एक ही समस्या है (प्लेन टेक्स्ट ठीक पता चलता है, html'd पाठ नहीं करता है): Changing default JLabel font
संपादित करें 3: मैंने ध्यान दिया गया है कि डाफॉन्ट से भी यादृच्छिक फोंट काम करेंगे अगर वे सिस्टम पर स्थापित हैं (यहां तक कि इस सटीक कोड के साथ, जहां मैं एक फ़ाइल से [अब स्थापित] ttf की प्रतिलिपि लोड कर रहा हूं)।
क्या आपके लिए एक [एसएससीईएस] (http://www.sscce.org) शामिल करना संभव होगा? इस बीच, यदि आपने पहले से नहीं किया है, [स्विंग घटक में HTML का उपयोग कैसे करें] (http://download.oracle.com/javase/tutorial/uiswing/components/html.html) ट्यूटोरियल पढ़ें। – mre
यह अत्यधिक संभावना है कि आप 'font.createFont' में समस्याएं हैं।'Jlabel' के' setFont() 'फ़ॉन्ट स्थापित करने के लिए गारंटी है - के रूप में @mre पता चलता है, उदाहरण के इस बेहतर जवाब देने के लिए मदद मिलेगी। –
मुझे पता है कि Font.createFont काम करता है क्योंकि अगर मैं JLabel पर setText ("उदाहरण") लोड फ़ॉन्ट दिखाता है, लेकिन अगर मैं setText (" उदाहरण") डिफ़ॉल्ट स्विंग JLabel फ़ॉन्ट प्रयोग किया जाता है। क्या यह एक एसएससी के रूप में गिना जाता है? स्पष्टीकरण के लिए –