填空题
本题的功能是用文本框来设定表盘中指针的位置。窗口中有一个画板和两个文本框,画板中绘制了一个表盘和时针、分针,通过文本框分别设定“时”和“分”,表盘中的时针和分针就会指到对应的位置上。 import java. awt. * ; import java. awt. event. * ; import java. awt. geom. * ; import javax. swing. * ; import javax. swing, event. * ; public class java3 public static void main(String[] args) TextTestFrame frame=new TextTestFrame(); frame. setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE); frame. show(); class TextTestFrame extends JFrame public TextTestFrame() setTitle("java3"); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); Container contentPane=getContentPane(); DocumentListener listener=new DocumentListen-er() ; JPanel panel=new JPanel(); hourField=new JTextField("12",3); panel, add(hourField); hourField, getDocument (). addDocumentListener(this) ; minuteField=new JTextField("00",3); panel, add(minuteField); minuteField, getDocument(), addDocumentListener(listener); contentPane, add ( panel, BorderLayout. SOUTH); clock=new ClockPanel(); contentPane, add (clock, BorderLayout. CENTER); public void setClock() try int hours = Integer. parseInt (hourField. getText(). trim()); int minutes = Integer. parselnt(minuteField, getText(), trim()); clock, setTime(hours, minutes); catch (NumberFormatException e) public static final int DEFAULT WIDTH=300; public static final int DEFAULT_HEIGHT=300; private JTextField hourField; private JTextField minuteField; private ClockPanel clock; private class clockFieldListener extends DocumentListener public void insertUpdate(DocumentEvent e) setClock(); public void removeUpdate(DocumentEvent e) setClock(); public void changedUpdate(DocumentEvent e) class ClockPanel extends JPanel public void paintComponent(Graphics g) super, paintComponent(g); Graphics2D g2=(Graphics2D)g; Ellipse2D circle =new Ellipse2D. Double(0,0,2 * RADIUS, 2 * RADIUS); g2. draw(circle); double hourAngle =Math. toRadians(90-360 * minutes/(12 * 60)); drawHand (g2, hourAngle, HOUR_HAND_LENGTH); double minuteAngle Math. toRadians(90-360 * minutes/60) drawHand(g2, minuteAngle, MINUTE_HAND_LENGTH); public void drawHand(Graphics2D g2, double angle, double handLength) Point2D end=new Point2D. Double( RADIUS+handLength * Math. cos(angle), RADIUS-handLength * Math. sin(angle)); Point2D center=new Point2D. Double(RADIUS, RADIUS) g2. draw(new Line2D. Double(center, end)); public void setTime(int h, int m) minutes=h*60+m; repaint(); private double minutes=0; private double RADIUS=100; private double MINUTE_HAND_LENGTH=0.8 * RADIUS; private double HOUR_HAND_LENGTH=0.6 * RADIUS;
【参考答案】
第1处:DocumentLislener listener=new ClockFieldListener() ......(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)
点击查看答案&解析