import java.awt.*;
import java.awt.event.*;public class UrlLabel extends Label implements MouseListener  // 监听鼠标动作
{
  boolean drawLine = false;  // 是否画线标志 
  public UrlLabel()   // 如果参数为空,调用另一个构造器
  {
    this("");
  }  public UrlLabel(String text) // 构造UrlLabel类
  {
    super(text);       // 调用父类的构造器
    addMouseListener(this);  // 增加鼠标监听器
  }  public void paint(Graphics g)
  {
    Rectangle r;
    super.paint(g);   // 由父类先处理显示文本
    if(drawLine)    // 如果是画线状态(说明鼠标在上方)
    {
      r = g.getClipBounds();  // 取字体边框范围
      g.drawLine(0, r.height - this.getFontMetrics(this.getFont()).getDescent(),
            this.getFontMetrics(this.getFont()).stringWidth(this.getText()),
            r.height - this.getFontMetrics(this.getFont()).getDescent()); //在最下边画线
    }
  }  public void mouseEntered(MouseEvent e)  // 鼠标进入事件
  {
    drawLine = true;  // 允许画线
    repaint();
  }  public void mouseExited(MouseEvent e)  //鼠标离开事件
  {
    drawLine = false;  // 放弃画线
    repaint();
  }
  public void mouseReleased(MouseEvent e){}
  public void mouseClicked(MouseEvent e){}
  public void mousePressed(MouseEvent e){}  public void destory()
  {
    removeMouseListener(this);  // 去掉监听
  }
}
==========================================
测试程序代码:UrlLabelText .java
------------------------------------------
import java.awt.*;
import java.awt.event.*;
import java.applet.*;public class UrlLabelText extends Applet
{
  public void init()
  {
    UrlLabel urlLabel = new UrlLabel("UrlLabelText");
    add(urlLabel);
  }
}