दिलचस्प पोस्ट
अंतर और जब getApplication () का उपयोग करें, getApplicationContext (), getBaseContext () और someClass.this जावा त्रुटि – वास्तविक और औपचारिक तर्क सूची लंबाई में भिन्न होती है सिपपी को पीआईपी के माध्यम से स्थापित नहीं किया जा सकता फ़ंक्शन के पास केवल एक एक्जिट पॉइंट क्यों होना चाहिए? Java.util.concurrent.ArrayBlockingQueue का उपयोग करते समय 'while' loops के बजाय 'if' के आस-पास कॉल करने के लिए () क्यों करता है? सीएसएस का उपयोग कर खाली इनपुट बॉक्स का मिलान करना Jquery sortable 'परिवर्तन' घटना तत्व स्थिति धागा सुरक्षित सी # सिंगलटन पैटर्न क्या मुझे बाइट या इंट का उपयोग करना चाहिए? फ़ाइल अपलोड के लिए एक्सप्रेस बॉडीपर्स को अक्षम कैसे करें (Node.js) क्यों नहीं जावा संग्रह सामान्य तरीके निकालें? जावा मल्टीथ्रेडिंग अवधारणा और जुड़ें () विधि किसी JSON स्ट्रिंग को किसी शब्दकोश में कनवर्ट कैसे करें? मैटप्ललिब में 2 डी गर्मी के नक्शे के माध्यम से पेजिंग / स्क्रॉल करना jquery क्लिक एजेक्स उत्पन्न सामग्री पर काम नहीं करता है

घुमाओ HTML ड्रॉस्ट्रिंग

मैं किसी विशिष्ट उद्देश्य के लिए कुछ विशेष घटक बनाने की कोशिश कर रहा हूं, उस घटक पर मुझे एक HTML स्ट्रिंग आकर्षित करने की आवश्यकता है, यहां एक नमूना कोड है:

public class MyComponent extends JComponent{ public MyComponent(){ super(); } protected void paintComponent(Graphics g){ //some drawing operations... g.drawString("<html><u>text to render</u></html>",10,10); } } 

दुर्भाग्य से डस्ट्रेसिंग विधि एचटीएमएल प्रारूप को नहीं पहचानती है, यह मूर्खता से स्ट्रिंग खींचती है जैसा कि यह है।

क्या यह काम करने का कोई तरीका है?

Solutions Collecting From Web of "घुमाओ HTML ड्रॉस्ट्रिंग"

यदि जावा 2 डी के एक प्रशंसक; लेकिन स्विंग घटकों और लेआउट में HTML से अधिक लाभ उठाने के लिए, मैं आपको @ कैमरािकर द्वारा सुझाए गए घटक दृष्टिकोण का उपयोग करने के लिए प्रोत्साहित करता हूं। यदि आवश्यक हो, तो आप JTable , एट अल में देखा गया फ्लायवेड रेंडरर दृष्टिकोण का उपयोग कर सकते हैं, जिसमें ड्राइंग के लिए बार-बार उपयोग किया जाता है। नीचे दिए गए उदाहरण तकनीक का एक बहुत सरलीकृत रूपरेखा है, केवल रंग और स्थान बदलते हैं।

परिशिष्ट: नवीनीकृत उदाहरण; CellRendererPane भी देखें और अपने ऐप्स मक्खी करें: प्रदर्शन को सुधारने के लिए फ़्लायवुड लागू करें

यहां छवि विवरण दर्ज करें

 import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import javax.swing.CellRendererPane; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; /** @see http://stackoverflow.com/questions/7774960 */ public class PaintComponentTest extends JPanel { private static final int N = 8; private static final String s = "<html><big><u>Hello</u></html>"; private JLabel renderer = new JLabel(s); private CellRendererPane crp = new CellRendererPane(); private Dimension dim; public PaintComponentTest() { this.setBackground(Color.black); dim = renderer.getPreferredSize(); this.add(crp); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); for (int i = 0; i < N; i++) { renderer.setForeground(Color.getHSBColor((float) i / N, 1, 1)); crp.paintComponent(g, renderer, this, i * dim.width, i * dim.height, dim.width, dim.height); } } private void display() { JFrame f = new JFrame("PaintComponentTest"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(this); f.pack(); f.setSize(dim.width * N, dim.height * (N + 1)); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new PaintComponentTest().display(); } }); } } 

जैसा कि दूसरों ने टिप्पणी की है, घुमाओ घटक एचटीएमएल 3.2 और बुनियादी शैलियों का समर्थन करते हैं।

LabelRenderTest.java paintComponent(Graphics) पद्धति में उस क्षमता का लाभ उठाने के तरीके के विवरण के लिए, इस थ्रेड पर LabelRenderTest.java स्रोत देखें।

दृष्टिकोण छवि को लेबल प्रस्तुत करना है, फिर चित्र को Graphics ऑब्जेक्ट में प्रस्तुत करना है।

आपके प्रश्न का उत्तर यह है कि HTML समर्थित नहीं है।

आसान समाधान स्विंग घटकों का उपयोग करना और उन्हें ठीक से बाहर करना है

यदि आप इसे स्वयं करना चाहते हैं तो आपको फॉन्ट को हेरफेर करने की आवश्यकता है जिसका उपयोग आप drawString () विधि के लिए करते हैं। आप इटैलिक, बोल्ड आदि के साथ फ़ॉन्ट का उपयोग कर सकते हैं।

यह लागू करने का तरीका नहीं है

drawString(String str, int x, int y) केवल निर्दिष्ट स्ट्रिंग द्वारा दिए गए टेक्स्ट को खींचती है, इस ग्राफिक्स प्रसंग के वर्तमान फ़ॉन्ट और रंग का उपयोग करते हुए।

आप यहां से अपनी समस्या के बारे में अधिक जानकारी प्राप्त कर सकते हैं, स्विंग अवयवों में HTML का उपयोग कैसे करें

मैंने paintHtmlString अनुकरण करने के लिए एक छोटा और एक साफ तरीका paintHtmlString ; यहां कोड है:

 public class MyComponent extends JComponent { private JLabel label = null; public MyComponent() { super(); } private JLabel getLabel() { if (label == null) { label = new JLabel(); } return label; } /** * x and y stand for the upper left corner of the label * and not for the baseline coordinates ... */ private void paintHtmlString(Graphics g, String html, int x, int y) { g.translate(x, y); getLabel().setText(html); //the fontMetrics stringWidth and height can be replaced by //getLabel().getPreferredSize() if needed getLabel().paint(g); g.translate(-x, -y); } protected void paintComponent(Graphics g) { //some drawing operations... paintHtmlString(g, "<html><u>some text</u></html>", 10, 10); } } 

मदद के लिए हर एक के लिए धन्यवाद, मैं सराहना करते हैं कि बहुत ज्यादा

अपने मूल वर्ग के रूप में JLabel उपयोग करें। Graphics.drawString() केवल … एक स्ट्रिंग खींच सकते हैं।

ग्राफिक्स के साथ पेंट करने के लिए HTML को रेंडर करने का एक आसान तरीका नहीं है, एक जेएलैबल के साथ जाएं।

हालांकि, एचएलएमएल के साथ एक जेएलैबल बनाकर और घटक के ग्राफिक्स को चित्रित करके इसे पूरा करने का एक दिलचस्प तरीका है:

 private JLabel label; public MyComponent() { label = new JLabel("Before Red"); label.setText("<html><u>test</u></html>"); this.add(label); } public void repaint(Graphics g){ g = label.getGraphics(); } 

इसे पूरा करने का सबसे आसान तरीका आपके ग्राफिक्स के लिए एक फ़ॉन्ट सेट करना होगा, उदाहरण के लिए:

 public void repaint(Graphics g){ Font f = new Font("Courier", Font.BOLD, 12); g.setFont(f); g.drawString("Bolded Courier", 5, 15); }