2011-07-03 14 views
10

पर टूलटिप्स जोड़ना मैं JTextPane के अंदर केवल एक निश्चित पाठ में कुछ टूलटिप्स जोड़ना चाहता हूं। उदाहरण के तौर पर, यदि JTextPane के अंदर कोई संदर्भ लिंक टेक्स्ट है, तो मैं लिंक दिखाने के लिए उस टेक्स्ट में टूलटिप जोड़ना चाहता हूं। क्या कोई तरीका है कि मैं इस कार्यक्षमता को प्राप्त कर सकता हूं?JTextPane

उत्तर

8

अच्छा सवाल।

पहले स्विंग HTML का समर्थन करता है, तो लिंक के साथ टूलटिप दिखाने के लिए आप बस कहना है:

comp.setToolTipText("<html><a href='http://www.google.com'>google</a></html>");

समस्या यह टूलटिप क्लिक करने योग्य बना रही है।

दुर्भाग्य से यह स्वयं स्विंग द्वारा नहीं किया जाता है।

टूलटिप ToolTipManager द्वारा बनाया गया है। जब आप setToolTipText फोन() JComponent टूलटिप प्रबंधक कि टूलटिप (विधि show() कि ओवरराइड नहीं किया जा सकता है का उपयोग करते हुए दिखाने पर जिम्मेदार है की साझा उदाहरण के लिए स्वयं का उदाहरण कहते हैं। आप टूलटिप प्रबंधक ही तो, बदल नहीं सकते भी।

सबसे अच्छा समाधान मेरा सुझाव कर सकते हैं निम्नलिखित करना है। आप का उपयोग Toolkit.getDefaultToolkit().addAWTEventListener()

तो, जब टूलटिप यह पता चलता है, और उस पर माउस श्रोता जोड़ने पकड़ दिखाया जा रहा है। यह माउस श्रोता कर देगा AWT घटनाओं को सुन सकते हैं टूलटिप स्वयं क्लिक करने योग्य।

यहां मैंने जो अभ्यास लिखा है वह है। आप इसका उपयोग कर सकते हैं यह एक संदर्भ के रूप में। सौभाग्य।

public static void main(String[] args) throws InterruptedException, InvocationTargetException { 
     final JFrame f = new JFrame("test"); 
     f.setSize(100, 100); 


     JLabel l = new JLabel("<html><a href='http://www.google.com'>google</a></html>"); 
     l.setToolTipText("<html><a href='http://www.google.com'>google</a></html>"); 


     long mask = AWTEvent.COMPONENT_EVENT_MASK | 
//  AWTEvent.CONTAINER_EVENT_MASK | 
//  AWTEvent.FOCUS_EVENT_MASK | 
//  AWTEvent.KEY_EVENT_MASK | 
//  AWTEvent.MOUSE_EVENT_MASK | 
//  AWTEvent.MOUSE_MOTION_EVENT_MASK | 
     AWTEvent.WINDOW_EVENT_MASK | 
     AWTEvent.ACTION_EVENT_MASK | 
     AWTEvent.ADJUSTMENT_EVENT_MASK | 
     AWTEvent.ITEM_EVENT_MASK | 
     AWTEvent.TEXT_EVENT_MASK; 

     Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { 
      @Override 
      public void eventDispatched(AWTEvent event) { 
       int id = event.getID(); 
       Object source = event.getSource(); 
       if (id == 101 && source instanceof JToolTip) { 
        JToolTip tooltip = (JToolTip)source; 

        //System.out.println("" + event.getID() + " " + event.getSource()); 

       } 

      } 
     }, mask); 
     f.add(l); 
     f.setVisible(true); 
    } 
2

आप jtextpane में HTML पृष्ठों को लोड करने का प्रयास कर सकते हैं। Here एक उदाहरण है। इस उदाहरण के बारे में अधिक स्पष्टीकरण here

1

आप JTextPane की तरह एक JTextPane में टूलटिपटेक्स्ट जोड़ सकते हैं, न कि घटक या शब्दों के हिस्सों के लिए।

आम तौर पर एक जेटीक्स्टपेन में कई लिंक हो सकते हैं, तो टूलटिपटेक्स्ट लिंक को किसके लिए दिखाना चाहिए?

लेकिन आप JTextPane में श्रोता जोड़ सकते हैं, और पुराने टूलटिप को हटा सकते हैं, और यदि आप एक लिंक का पता लगाते हैं, तो एक नया जोड़ें।

6

ओवरराइड: टेक्स्ट फलक के getToolTipText (MouseEvent ईवेंट) विधि।

माउसइवेंट का उपयोग करके आप दस्तावेज़ में ऑफसेट प्राप्त करने के लिए viewToModel (...) विधि का उपयोग कर सकते हैं। फिर आप यह निर्धारित करने के लिए गुण प्राप्त कर सकते हैं कि आप एक लिंक पर होवर कर रहे हैं या नहीं।

या getCursor() विधि का उपयोग करना शायद एक आसान तरीका है। जब कर्सर हाथ कर्सर है तो आप एक लिंक पर हैं।

फिर आप वर्तमान लिंक के लिए उपयुक्त टूल टिप टेक्स्ट वापस कर सकते हैं।

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