import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import java.awt.geom.AffineTransform;
import java.awt.geom.GeneralPath;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
public class TextLayoutF extends JFrame { private JPanel contentPane;
JTextField t1 = new JTextField();
JTextField t2 = new JTextField();
miaohong mh=new miaohong(); /**
 * Launch the application.
 */
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TextLayoutF frame = new TextLayoutF();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
} /**
 * Create the frame.
 */
public TextLayoutF() {
t2.setBounds(160, 12, 104, 27);
t2.setColumns(10);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null); t1.setBounds(27, 12, 104, 27);
contentPane.add(t1);
t1.setColumns(10);


mh.setBounds(36, 62, 159, 217);
contentPane.add(mh);

contentPane.add(t2);

t1.addKeyListener(new T1A());


}


class T1A extends KeyAdapter {
   
    public void keyTyped(KeyEvent e) {
      t2.setText(t1.getText());
   
      mh.s=t1.getText();
    }
  }

  class miaohong  extends JComponent{
  String s;    public void paintComponent(Graphics g)
   {
      Graphics2D g2 = (Graphics2D) g;
      drawPage(g2);
   }  
   public void drawPage(Graphics2D g2)
   {
      FontRenderContext context = g2.getFontRenderContext();
      Font f = new Font("Serif", Font.PLAIN, 72);
      GeneralPath clipShape = new GeneralPath();
            
      TextLayout layout = new TextLayout(s, f, context);//无法获取KeyAdapter中的s的值???????????
      AffineTransform transform = AffineTransform.getTranslateInstance(0, 72);
      Shape outline = layout.getOutline(transform);
      clipShape.append(outline, false);       g2.draw(clipShape);
      g2.clip(clipShape);    } }

}