2012-07-26 11 views
5

यह कोड है जिसे टेस्ट 2 नामक एक प्रोजेक्ट में test2.java नामक एक पैकेज में टेस्ट 2 कहा जाता है।जेएलबेल में हाइपरलिंक्स

package test2; 

import javax.swing.JFrame; 

public class Test2 { 
    public static void main(String[] args) { 
    JFrame mainWindow = new HtmlWindow("<html>" 
      + "<a href=\"http://stackoverflow.com\">" 
      + "blah</a></html>"); 
     mainWindow.setVisible(true); 
    } 
} 

एक ही पैकेज मैं HtmlWindow.java नामक एक फ़ाइल में इस कोड है में;

package test2; 

import java.awt.BorderLayout; 
import java.awt.Container; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 


class HtmlWindow extends JFrame { 
    public HtmlWindow(String refreshGrid) { 
     super("blah"); 
     setSize(300, 100); 
     Container content = getContentPane(); 
     String labelText = refreshGrid; 
     JLabel coloredLabel = new JLabel (labelText, JLabel.CENTER); 
     content.add(coloredLabel, BorderLayout.NORTH); 

    } 

} 

जब मैं परियोजना चलाने के लिए, मैं शब्द "blah" उम्मीद स्थान में के साथ एक खिड़की मिल, नीले और रेखांकित किया, लेकिन कर्सर परिवर्तन नहीं होता है जब मैं शब्द पर होवर, और न ही कुछ होता है जब मैं उस पर क्लिक करता हूं।

मेरे प्रश्न निम्नानुसार हैं;

  • क्या जेएलबेल में हाइपरलिंक डालना संभव है?
  • यदि हां, तो क्या मैं कुछ गलत कर रहा हूं, या प्रोग्राम ठीक से नहीं चल रहा है?
  • यदि नहीं, तो एक अच्छा विकल्प क्या है? कारण मैं जेबुटन का उपयोग नहीं कर रहा हूं, यह है कि आखिरकार मैं हाइपरलिंक्स की मनमानी संख्या का ग्रिड बनाना चाहता हूं, और मैं चाहता हूं कि हाइपरलिंक्स छवियां हों, और जब जेबटन के पास छवियां हो सकती हैं, तो मैं नहीं चाहता कि हाइपरलिंक्स "बटन" की तरह दिखें। मुझे लगता है कि मैं एक गैर संपादन योग्य जेडडिटरपेन का उपयोग कर सकता हूं?

उत्तर

4

स्विंग पूरी तरह से कार्यरत ब्राउज़र नहीं है। यह लिंक सहित सरल HTML का समर्थन करता है लेकिन कर्सर शैली को स्वचालित रूप से नहीं बदलता है। जहां तक ​​मुझे पता है कि आपको इसे प्रोग्रामेटिक रूप से करना है, यानी अपने लेबल में माउस श्रोता जोड़ें और जब आपका माउस आपके लेबल पर हो तो कर्सर शैली बदलें। जाहिर है आप अपनी खुद की कक्षा LinkLabel लिख सकते हैं जो इस तर्क को लागू करता है और फिर जब भी आपको आवश्यकता हो, इसका उपयोग करें।

+0

आपके त्वरित उत्तर के लिए धन्यवाद! मुझे लगता है कि माउस श्रोता का उपयोग बेहतर समाधान है, क्योंकि लंबे समय तक मैं विशेष रूप से ब्राउज़र खोलने में दिलचस्पी नहीं लेता लेकिन कुछ अन्य प्रतिक्रियाओं को ट्रिगर करता हूं। –

3

ऐसा प्रतीत नहीं होता है कि केवल एक हाइपर लिंक करके आपको अपना सामान्य वेब ब्राउज़र व्यवहार मिल जाएगा। लाइन पर उदाहरणों के मुताबिक, आमतौर पर ActionListener को JLabel पर लागू करना और Desktop.getDesktop().browse(new URI("...")); पर कॉल करना है।

इस कॉल के साथ समस्या यह है कि यह सभी ऑपरेटिंग सिस्टम के साथ काम नहीं कर रहा है। आप क्या कर सकते हैं यह देखने के लिए होगा कि क्या आप कमांड लाइन से ब्राउजर में लिंक खोल सकते हैं, अगर आप ऐसा कर सकते हैं, तो Process कक्षा से exec विधि का उपयोग कर आपको जो चाहिए उसे करने में सक्षम होना चाहिए। हालांकि, यह प्लेटफ़ॉर्म पर निर्भर होने की संभावना है।

कहा जा रहा है, यह मेरी राय है कि लेबल को चित्रित करने के लिए लेबल का उपयोग किया जाना चाहिए (भले ही मुझे लगता है कि एक लिंक देखने पर, उपयोगकर्ता प्रकार जानता है कि क्या होगा, इसलिए मुझे लगता है कि इस मामले में, हम इसे अपवाद के रूप में कॉल कर सकते हैं)। यदि आप एक घटक चाहते हैं जो ट्रिगर्स और एक्शन है तो आप इसके बजाय JButton का उपयोग कर सकते हैं।

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