import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class Test extends JFrame implements DocumentListener 
{
private JTextField hourField;
private JTextField minuterField;
private ClockPanel clock;
public Test(){
setTitle("Test");
setSize(300,200);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);}});}
Container contentPane =getContentPane();
JPanel p=new JPanel();
hourField =new JTextField("12",3);
p.add(hourField);
hourField.getDocument().addDocumentListener(this);
minuterField=new JTextField("00",3);
p.add(minuterField);
minuterField.getDocument().addDocumentListener(this);
contentPane.add(p,"South");
clock=new ClockPanel();
contentPane.add(clock,BorderLayout.CENTER);
public void insertUpdate(DocumentEvent e){
setClock();
}
public void removeUpdate(DocumentEvent e){
setClock();
}
public void changedUpdate(DocumentEvent e){
}
public void setClock(){
int hours=Integer.parseInt(hourField.getText().trim());
int minuters=Integer.parseInt(minuterField.getText().trim());
clock.setTime(hours,minuters);
}
}class ClockPanel extends JPanel{
private int minuter=0;
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawOval(0,0,100,100);
double hourAngle=2*Math.PI*(minuter-3*60)/(12*60);
double minuterAngle=2*Math.PI*(minuter-15)/60;
g.drawLine(50,50,50+(int)(30*Math.cos(hourAngle)),50+(int)(30*Math.sin(hourAngle)));
g.drawLine(50,50,50+(int)(45*Math.cos(minuterAngle)),50+(int)(45*Math.sin(minuterAngle)));
}
public void setTime(int h,int m){
minuter=h*60+m;
repaint();
}
}public class ClockTest{
public static void mian(String[] args){
JFrame f=new Test();
f.show();
}
}

解决方案 »

  1.   

    类中的初始话要一步完成.改了一下.
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
     class Test extends JFrame implements DocumentListener 
    {
    private JTextField hourField ;
    private JTextField minuterField;
    private ClockPanel clock;
    public Test(){
    Container contentPane =getContentPane();
    JPanel p=new JPanel();
    hourField =new JTextField("12",3)
    p.add(hourField);
    hourField.getDocument().addDocumentListener(this);
    minuterField=new JTextField("00",3);
    p.add(minuterField);
    minuterField.getDocument().addDocumentListener(this);
    contentPane.add(p,"South");
    clock=new ClockPanel();
    contentPane.add(clock,BorderLayout.CENTER);
    setTitle("Test");
    setSize(300,200);
    addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e){
    System.exit(0);}});}

    public void insertUpdate(DocumentEvent e){
    setClock();
    }
    public void removeUpdate(DocumentEvent e){
    setClock();
    }
    public void changedUpdate(DocumentEvent e){
    }
    public void setClock(){
    int hours=Integer.parseInt(hourField.getText().trim());
    int minuters=Integer.parseInt(minuterField.getText().trim());
    clock.setTime(hours,minuters);
    }
    }
    class ClockPanel extends JPanel{
    private int minuter=0;
    public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawOval(0,0,100,100);
    double hourAngle=2*Math.PI*(minuter-3*60)/(12*60);
    double minuterAngle=2*Math.PI*(minuter-15)/60;
    g.drawLine(50,50,50+(int)(30*Math.cos(hourAngle)),50+(int)(30*Math.sin(hourAngle)));
    g.drawLine(50,50,50+(int)(45*Math.cos(minuterAngle)),50+(int)(45*Math.sin(minuterAngle)));
    }
    public void setTime(int h,int m){
    minuter=h*60+m;
    repaint();
    }
    }
    public class ClockTest{
    public static void main(String[] args){
    JFrame f=new Test();
    f.show();
    }
    }