One of the Text Input


     import java.awt.*;
     import javax.swing.*;
     import javax.swing.event.*;
     import java.awt.geom.*;
     import java.awt.event.*;
 
     public class TextTest{
        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("TextTest");
          setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);

          Container contentPane = getContentPane();

   DocumentListener listener = new ClockFieldListener();

   JPanel panel = new JPanel();

   hourField = new JTextField("12",3);
   panel.add(hourField);
   hourField.getDocument().addDocumentListener(listener);

   minuteField = new JTextField("0",3);
   panel.add(minuteField);
   hourField.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.parseInt(hourField.getText().trim());

   clock.setTime(hours,minutes);
    }
    catch(NumberFormatException e){}
 }
 
        private static  int DEFAULT_WIDTH = 300;
        private static  int DEFAULT_HEIGHT =200;

   private JTextField hourField;
 private JTextField minuteField;
 private ClockPanel clock;

 private class ClockFieldListener implements 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;

   }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值