java编程利用按钮实现时钟的停止和开始功能(原代码)

 我来答
我是谁我在哪我要干什么呢
推荐于2016-01-16 · TA获得超过560个赞
知道小有建树答主
回答量:350
采纳率:100%
帮助的人:375万
展开全部

如下:

import java.awt.*;

import java.awt.event.*;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.Timer;

import java.awt.geom.*;

import java.util.*;

class Clock extends Canvas 

implements ActionListener{

   static  JButton jb=new JButton("开始");

   static JButton jb1=new JButton("暂停");

   Date date;

   Timer secondTime; 

   int hour,munite,second;

   Line2D secondLine,muniteLine,hourLine;

   int a,b,c;

   double pointSX[]=new double[60],//用来表示秒针端点坐标的数组

          pointSY[]=new double[60], 

          pointMX[]=new double[60], //用来表示分针端点坐标的数组

          pointMY[]=new double[60], 

          pointHX[]=new double[60], //用来表示时针端点坐标的数组

          pointHY[]=new double[60];

   Clock()

   { secondTime=new Timer(1000,this);

     pointSX[0]=0;                         //12点秒针位置

     pointSY[0]=-100;

     pointMX[0]=0;                         //12点分针位置

     pointMY[0]=-90;

     pointHX[0]=0;                         //12点时针位置

     pointHY[0]=-70;

     double angle=6*Math.PI/180;          //刻度为6度

     for(int i=0;i<59;i++)                //计算出各个数组中的坐标

     { pointSX[i+1]=pointSX[i]*Math.cos(angle)-Math.sin(angle)*pointSY[i];

       pointSY[i+1]=pointSY[i]*Math.cos(angle)+pointSX[i]*Math.sin(angle);

       pointMX[i+1]=pointMX[i]*Math.cos(angle)-Math.sin(angle)*pointMY[i];

       pointMY[i+1]=pointMY[i]*Math.cos(angle)+pointMX[i]*Math.sin(angle);

       pointHX[i+1]=pointHX[i]*Math.cos(angle)-Math.sin(angle)*pointHY[i];

       pointHY[i+1]=pointHY[i]*Math.cos(angle)+pointHX[i]*Math.sin(angle);

     }

    for(int i=0;i<60;i++)              

     { pointSX[i]=pointSX[i]+120;            //坐标平移

       pointSY[i]=pointSY[i]+120;

       pointMX[i]=pointMX[i]+120;            //坐标平移

       pointMY[i]=pointMY[i]+120;

       pointHX[i]=pointHX[i]+120;            //坐标平移

       pointHY[i]=pointHY[i]+120;

     }

    secondLine=new Line2D.Double(0,0,0,0);

    muniteLine=new Line2D.Double(0,0,0,0);

    hourLine=new Line2D.Double(0,0,0,0);

    secondTime.start();        //秒针开始计时

   

   }

  public void paint(Graphics g)

   {   for(int i=0;i<60;i++)     //绘制表盘上的小刻度和大刻度

           {  int m=(int)pointSX[i];

              int n=(int)pointSY[i];

              if(i%5==0)

                { g.setColor(Color.red);

                  g.fillOval(m-4,n-4,8,8);

                }

             else

                { g.setColor(Color.cyan);

                  g.fillOval(m-2,n-2,4,4);

                }

           }

      g.fillOval(115,115,10,10);  //钟表中心的实心圆

      Graphics2D g_2d=(Graphics2D)g;

      g_2d.setColor(Color.red);

      g_2d.draw(secondLine);

      BasicStroke bs=

      new BasicStroke(3f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER);

      g_2d.setStroke(bs);

      g_2d.setColor(Color.blue);

      g_2d.draw(muniteLine);

      bs=new BasicStroke(6f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER);

      g_2d.setStroke(bs);

      g_2d.setColor(Color.green);

      g_2d.draw(hourLine);

   }

  public void actionPerformed(ActionEvent e)

   { if(e.getSource()==secondTime){

    date=new Date();

        String s=date.toString();

        hour=Integer.parseInt(s.substring(11,13)); 

        munite=Integer.parseInt(s.substring(14,16));

        second=Integer.parseInt(s.substring(17,19)); //获取时间中的秒

        int h=hour%12;

        a=second;                    //秒针端点的坐标

        b=munite;                    //分针端点的坐标

        c=h*5+munite/12;             //时针端点的坐标

        secondLine.setLine(120,120,(int)pointSX[a],(int)pointSY[a]);

        muniteLine.setLine(120,120,(int)pointMX[b],(int)pointMY[b]);

        hourLine.setLine(120,120,(int)pointHX[c],(int)pointHY[c]);

     

       repaint();

     } if(e.getSource()==jb){

      secondTime.start();

     }if(e.getSource()==jb1){

      secondTime.stop();

     }

   }

   public static void main(String args[]){

      

     JFrame win=new JFrame("时钟");

     JPanel jp=new JPanel();

     jp.add(jb);

     jp.add(jb1);

     Clock clock=new Clock();

     jb.addActionListener(clock);

     jb1.addActionListener(clock);

     win.add(clock,BorderLayout.CENTER);

     win.add(jp,"South");

     win.setVisible(true);

     win.setSize(246,300);

     win.setDefaultCloseOperation(3) ;

     win.validate(); 

     

   }

}

运行截图:

有问题就追问,满意请采纳。

百度网友b18252bd
2012-06-05
知道答主
回答量:14
采纳率:0%
帮助的人:7.8万
展开全部
package com.main;
//仅供参考
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class Test extends JFrame{

/**
* @param args
*/
Boolean flag = true;
JTextArea jta = new JTextArea();
JButton jb = new JButton("button");

public Test(){

jb.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) {
if(flag){
flag = false;
}else{
flag = true;
}
}
});

this.add(jta,BorderLayout.CENTER);
this.add(jb,BorderLayout.SOUTH);
this.setSize(300, 300);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
int i = 0;
while(true){
if(flag){
i = i + 1;
jta.setText(i+"");
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}
}
});
thread.start();

}
public static void main(String[] args) {

Test test = new Test();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友845f74e61
2012-06-05 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1635万
展开全部
要表盘那样的?
追问
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
375694052
2012-06-05 · TA获得超过261个赞
知道答主
回答量:287
采纳率:0%
帮助的人:143万
展开全部
使用按钮响应事件,可以用线程类Thread的sleep方法,也可以用timer类来实现暂停,具体的代码不难写,楼主查查API哈
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式