//自己写一个jlable类,可以加下划线,但是下划线的长度=文字的长度长,在想想。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.text.*;class DisplayPanel extends JLabel{
 String text ="2D Text!";
 AttributedString attribString; 
 AttributedCharacterIterator attibCharIterator;
 
 public DisplayPanel(String texts){
  int index = text.indexOf(texts);
  int length = texts.length();
  attribString = new AttributedString(text);
  attribString.addAttribute(TextAttribute.UNDERLINE,TextAttribute.UNDERLINE_ON,index,index+length);
 }public void paintComponent(Graphics g){
 super.paintComponent(g);
 Graphics2D g2 =(Graphics2D)g;
 attibCharIterator = attribString.getIterator();
 FontRenderContext frc = new FontRenderContext(null,false,false);
 TextLayout layout = new TextLayout(attibCharIterator,frc);
 layout.draw(g2,100,100);
 }
}public class UnderLine extends JFrame{
public UnderLine(){
getContentPane().add(new DisplayPanel("Text"));
      setVisible(true);
   setSize(new Dimension(150,150));
      this.addWindowListener (new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}
});
  pack();
  }
  
  public static void main(String args[]){
UnderLine f = new UnderLine();
f.show();
 }
}