在这个程序中两个JTextField对象我已完成了监听器的注册,为什么没有反应呢?请高手指教!/**
 * @(#)TextTest.java
 *
 * TextTest application
 *
 * @author 
 * @version 1.00 2008/10/9
 */
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
import javax.swing.event.*; 
public class TextTest {
    
    public static void main(String[] args) {
    
     // TODO, add your application code
     JFrame frame=new TextFrame();
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.show();
     System.out.println("Hello World!");
    }
}
class TextFrame extends JFrame
{
private JTextField hourfield;
private JTextField minutefield;
private TextPanel clock;
private DListener listener;
public TextFrame()
{
this.setTitle("TextTest");
this.setSize(220,265);

JPanel panel=new JPanel();
Container container=this.getContentPane();
hourfield=new JTextField("12");
hourfield.setColumns(3);
minutefield=new JTextField("30",3);

panel.add(hourfield);
panel.add(minutefield);
hourfield.getDocument().addDocumentListener(listener);
minutefield.getDocument().addDocumentListener(listener);
container.add(panel,BorderLayout.SOUTH);
clock=new TextPanel();
container.add(clock);
}
public void setClock()
{
try
{
System.out.println("zhu");
int hour=Integer.parseInt(hourfield.getText().trim());
int minute=Integer.parseInt(minutefield.getText().trim());
clock.setTime(hour,minute);
}
catch(Exception e){}

}
private class DListener implements DocumentListener
{
public void insertUpdate(DocumentEvent e){setClock();}
public void removeUpdate(DocumentEvent e){setClock();}
public void changedUpdate(DocumentEvent e){}
}

}
class TextPanel extends JPanel
{
private double minute;
private double hour;
private double hourRadius=60;
private double minuteRadius=80;

public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
Ellipse2D.Double cir=new Ellipse2D.Double(0,0,200,200);
g2.draw(cir);
Ellipse2D.Double ir=new Ellipse2D.Double(96,96,8,8);
// g2.draw(ir);
//g2.setColor(Color.YELLOW);
g2.fill(ir);

double hourAngle=Math.toRadians(90-360*minute/(60*12));
double minuteAngle=Math.toRadians(90-360*minute/60);
drawH(hourAngle,g2,hourRadius);
drawH(minuteAngle,g2,minuteRadius);
System.out.println(minuteAngle+"\n"+hourAngle);

}
public void drawH(double Angle,Graphics2D g2,double radius)
{
Point2D end =new Point2D.Double(100+Math.cos(Angle)*radius,100-Math.sin(Angle)*radius);
Point2D enter=new Point2D.Double(100,100);
if(radius==60)
{
g2.setColor(Color.red);
}
else
g2.setColor(Color.BLUE);
g2.draw(new Line2D.Double(enter,end));
}
public void setTime(int h,int m)
{
minute=h*60+m;
repaint();
}
}