我想要在JPanel中显示一个超链接,鼠标经过时会出现下划线,单击转到指定的URL那种。
试了直接在JLabel上写HTML代码貌似不行,不知道有什么组件能够实现这个功能的?还是要自己写鼠标事件?

解决方案 »

  1.   

    LABLE上面加个JBUTTON,点击后
    Runtime.getRuntime().exec(IExplore.exe   "mailto:[email protected]") 
    在LABLE上注册鼠标事件 移过去后JBUTTON下面DRAWLINE
      

  2.   

    如果你是JDK1.6 还有个更好的办法 JDK1.6中实现了调用IE的JNI
    代码如下
    package csdn;import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.awt.Desktop;
    /**
    *Swing中实现超连接,注意:需要JDK1.6
    *@author Eastsun
    */
     class SupperLink{
        public static void main(String[] args){
            JFrame frame =new JFrame("SupperLink");
            JLabel label =new LinkLabel("欢迎访问 csdn blog^_^","http://www.csdn.net");
            frame.add(label);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setVisible(true);
        }
    }
    /**
    *LinkLabel,一个实现超连接的Label.
    *使用方法: label =new LinkLabel("在label上现示的文本","点击文本时打开的url地址");
    */
    class LinkLabel extends JLabel{
        private String text,url;
        private boolean isSupported;
        public LinkLabel(String text,String url){
            this.text =text;
            this.url  =url;
            try{
                this.isSupported = Desktop.isDesktopSupported()&&Desktop.getDesktop().isSupported(Desktop.Action.BROWSE);
            }catch(Exception e){
                this.isSupported = false;
            }
            setText(false);
            addMouseListener(new MouseAdapter(){
                public void mouseEntered(MouseEvent e){
                    setText(isSupported);
                    if(isSupported) setCursor(new Cursor(Cursor.HAND_CURSOR));
                }
                public void mouseExited(MouseEvent e){
                    setText(false);
                }
                public void mouseClicked(MouseEvent e){
                    try{
                        Desktop.getDesktop().browse(new java.net.URI(LinkLabel.this.url));
                    }catch(Exception ex){
                    }
                }
            });
        }
        private void setText(boolean b){
            if(!b) setText("<html><font color=black>"+text);
            else  setText("<html><font color=blue><u>"+text);
        }}
      

  3.   

    package csdn;import java.awt.*;
    import java.awt.event.*;
    import java.io.IOException;
    import javax.swing.*;/**
    *GLabel,一个实现超连接的Label.
    *使用方法: label =new GLabel("在label上现示的文本","点击文本时打开的url地址");
    */
    class GLabel extends JLabel
    {
    private String _url;
    private String _text;
    private Cursor cur_bak;

    public GLabel(String text, String url)
    {
    if (!url.startsWith("http://")) {
    url = "http://" + url;
    }
    this._url = url;
    this._text = text;
    setText(text);

    this.addMouseListener(new MouseAdapter(){
    public void mouseEntered(MouseEvent e)
    {
    cur_bak = getCursor();
    setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
    setText("<html><u>" + _text + "</u></html>");
    }

    public void mouseExited(MouseEvent e)
    {
    setCursor(cur_bak);
    setText(_text);
    }

    public void mousePressed(MouseEvent e) 
    {
    try {
    Runtime.getRuntime().exec("explorer " + _url);
    } catch (IOException e1) {
    e1.printStackTrace();
    }
    }
    });
    }

    //测试
    public static void main(String[] args)
    {
    JFrame f = new JFrame();
    f.setLayout(new FlowLayout());
    f.add(new GLabel("csdn", "http://csdn.net/"));
    f.setSize(500, 400);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }
    }
      

  4.   

    setText("<html><a href='*.jsp'>text</a></html>");
      

  5.   

    用Desktop可以了,感谢楼上的高手~^^
      

  6.   

    setText("<html><a href='*.jsp'>text</a></html>");
    -------------------------------------------------------------
    这个我试过,不行的说……