2011-04-08 9 views
5

मैं एक जेपीनेल में एक हाइपरलिंक जोड़ने की कोशिश कर रहा हूं। मैं इसे टेक्स्ट नीला (और रेखांकित) बनाना चाहता हूं और लिंक चयन योग्य होना चाहिए (इसके कुछ भाग की प्रतिलिपि बनाने के लिए)। तो मैं JLabel का उपयोग करने की कोशिश की: हाँ, यह कुछ इस तरह [भयंकर] लिखने की अनुमति:क्या जावा में मूल स्विंग घटकों के साथ चयन करने योग्य हाइपरलिंक बनाना संभव है?

someLabel.setText("<html><font color=\"#0000ff\"><u>http://example.com</u></font></html>"); 

लेकिन दुर्भाग्य से, JLabel किसी भी पाठ का चयन करने की अनुमति नहीं देता है। मैंने JTextField का उपयोग करने का भी प्रयास किया, लेकिन इसके विपरीत, यह अपने फ़ील्ड में एचटीएमएल/सीएसएस का उपयोग करने की अनुमति नहीं देता है।

तो, क्या बुनियादी स्विंग घटकों के साथ हाइपरलिंक (उचित संकेत के साथ) बनाने का कोई तरीका मौजूद है, जिसे इसके [और प्रतिलिपि] भाग का चयन करने की अनुमति होगी, या क्या मुझे कुछ तृतीय पक्ष घटकों का उपयोग करने की कोशिश करनी चाहिए? धन्यवाद।

उत्तर

5

आप एक गैर संपादन योग्य JEditorPane में HTML सामग्री प्रदर्शित कर सकते हैं । यह चयन योग्य है, और आप लिंक को HyperlinkListener:

JEditorPane content = new JEditorPane(); 
    content.setContentType("text/html"); 
    content.setEditable(false); 
    content.setText("<html><a href=\"http://stackoverflow.com\">Link</a></html>")); 
    content.addHyperlinkListener(new HyperlinkListener() { 
     @Override 
     public void hyperlinkUpdate(HyperlinkEvent e) { 
      if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { 
       try { 
        Desktop.getDesktop().browse(e.getURL().toURI()); 
       } catch (Exception e1) { 
        Logger.getLogger(getClass()).error(
          "Error opening link " + e.getURL(), e1); 
       } 
      } 
     } 
    }); 
0

आप एक कस्टम Jlabel [विस्तार Jlabel] और JLabel के लिए एक MouseListener बारे में बनाना होगा। आपके माउस श्रोता को उपयोगकर्ता को JLabel पर क्लिक करते समय उपयोगकर्ता को लिंक पर निर्देशित करने का काम करना होगा। माउस इवेंट [मूल रूप से MouseListener इंटरफ़ेस की विधि जहां आपको रीडायरेक्टिंग कोड लिखना है] जिसे आप ढूंढ रहे हैं mouseClicked है।

+0

'sfrj' पर मेरी टिप्पणी देखें। –

+0

क्या मेरा समाधान गलत है? मैंने इस दृष्टिकोण में एक कस्टम घटक बनाने का उपरोक्त समाधान दिया है कि वह इस घटक का उपयोग कई स्थानों पर करेगा। एक वर्ग में कोड को एक अलग घटक के रूप में कोड के पुन: उपयोग की सुविधा प्रदान करता है। –

+0

उस टिप्पणी में 'फोकस करने योग्य' के साथ कोई संबंध नहीं है, जो मैं जिक्र कर रहा था। (नहीं, आपका समाधान 'सही' है, लेकिन इसे थोड़ा छोटा करना बेहतर होगा।) –

1

यहाँ कैसे आप किसी हाइपरलिंक के साथ एक JLabel बना सकते हैं, तो आप बस इसे अपने JPanel करने के लिए जोड़ सकते हैं:

public HyperLinkLabel() 
{ 
JPanel p = new JPanel(); 
final String strURL = "http://www.yahoo.com"; 
final JLabel label = new JLabel("<html><a href=\" " + strURL + "\"> click </a></html>"); 

final JEditorPane htmlPane = new JEditorPane(); 


p.add(label); 

getContentPane().add(BorderLayout.NORTH, p); 
getContentPane().add(BorderLayout.CENTER, new JScrollPane(htmlPane)); 
setBounds(20,200, 500,500); 

label.addMouseListener(new MouseAdapter() { 
    public void mouseEntered(MouseEvent me) { 
     label.setCursor(new Cursor(Cursor.HAND_CURSOR)); 
    } 
    public void mouseExited(MouseEvent me) { 
     label.setCursor(Cursor.getDefaultCursor()); 
    } 
    public void mouseClicked(MouseEvent me) 
    { 
     System.out.println("Clicked on Label..."); 
     try { 
      htmlPane.setPage(new URL(strURL)); 
     } 
     catch(Exception e) { 
      System.out.println(e); 
     } 
    } 
    }); 
+2

आपके उदाहरण के साथ समस्या यह है कि यह कुंजीपटल केंद्रित है। हालांकि ऐसी कार्यक्षमता आसानी से जोड़ दी गई है। 1) 'JLabel' फोकस योग्य सेट करें। 2) एक 'फोकस लिस्टर' जोड़ें जो पाठ के रंग को बदलता है (यानी 'सेटफोर्गग्राउंड (रंग) ') फोकस/खोए गए फोकस पर। 'कलर' को बदलना' माउसलिस्टर 'में भी एक अच्छा विचार हो सकता है। –

संबंधित मुद्दे