「JAVA获取时钟」Java获取小时
今天给各位分享JAVA获取时钟的知识,其中也会对Java获取小时进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、用 java 写一个clock的类,100毫秒的时钟 求代码。。越简单越好。。最好有注释
- 2、Java编写世界时钟
- 3、JAVA画时钟代码
- 4、java简单时钟
- 5、怎么用java编写时钟呀?
- 6、java输入时间显示钟表;要求输入一个时分秒,输出一个静态的钟表,显示你输入的时间。
用 java 写一个clock的类,100毫秒的时钟 求代码。。越简单越好。。最好有注释
这里有一个时钟的类,你看一下吧,不明白你的 100毫秒的时钟 是什么意思。
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Line2D;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class ClockAs 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];
ClockAs() {
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);
ClockAs clock = new ClockAs();
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();
}
}
Java编写世界时钟
package Time;
import java.awt.*;
import javax.swing.*;
import java.util.*;
public class TimerTest extends JFrame{
TimerPanel tp;
TimerTest(){
setTitle("世界时钟");
setSize(500,300);
tp=new TimerPanel();
Thread t=new Thread(tp);
t.start();
this.add(tp);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new TimerTest();
}
}
class TimerPanel extends JPanel implements Runnable{
Time[] t=new Time[6];
TimerPanel(){
t[0]=new Time(0,0,"北京",8);
t[1]=new Time(150,0,"巴黎",1);
t[2]=new Time(300,0,"华盛顿",8);
t[3]=new Time(0,150,"洛杉矶",5);
t[4]=new Time(150,150,"伦敦",0);
t[5]=new Time(300,150,"芝加哥",7);
setBackground(Color.black);
}
public void paint(Graphics g){
super.paint(g);
for(int i=0;it.length;i++)
t[i].draw(g);
}
public void run() {
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.repaint();
}
}
}
/*上面就不注释了,下面的是Time类*/
class Time{
private int x,y;/*每个钟表的坐标*/
private String place;/*每个钟表的名字*/
private int timezone;/*每个钟表的时区,东x区为+x,西x区为-x*/
private Date d;
private long time;
private double hour,minite,second;
Time(int x,int y,String place,int timezone){
this.x=x;
this.y=y;
this.place=place;
this.timezone=timezone;
}
public void draw(Graphics g){
g.setColor(Color.green);
d=new Date();
time=d.getTime();/*获得0时区1970年1月1日0点到现在的毫秒数*/
hour=(((time/1000)+3600*timezone)%43200)*2*Math.PI/3600/12;/*计算时针弧度*/
minite=(time/1000)%3600*2*Math.PI/3600;/*计算分针弧度*/
second=(time/1000)%60*2*Math.PI/60;/*计算秒针弧度*/
/*画出钟表轮廓和时针*/
((Graphics2D)g).setStroke(new BasicStroke(3.0f));
((Graphics2D)g).drawOval(x, y, 100, 100);
((Graphics2D)g).drawLine(x+50, y, x+50, y+5);
((Graphics2D)g).drawLine(x+50, y+100, x+50, y+95);
((Graphics2D)g).drawLine(x, y+50, x+5, y+50);
((Graphics2D)g).drawLine(x+100,y+50, x+95, y+50);
((Graphics2D)g).drawLine(x+50,y+50,(int)(x+50+25*Math.sin(hour)),(int)(y+50-25*Math.cos(hour)));
/*画出分针*/
((Graphics2D)g).setStroke(new BasicStroke(2.0f));
((Graphics2D)g).drawLine(x+50,y+50,(int)(x+50+35*Math.sin(minite)),(int)(y+50-35*Math.cos(minite)));
/*画出秒针*/
((Graphics2D)g).setStroke(new BasicStroke(1.0f));
((Graphics2D)g).drawLine(x+50,y+50,(int)(x+50+45*Math.sin(second)),(int)(y+50-45*Math.cos(second)));
/*画出钟表名字*/
g.setColor(Color.red);
g.drawString(place, x+35, y+120);
}
}
写了好久,把分给我吧~~
JAVA画时钟代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import sun.util.calendar.Gregorian;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class ClockPointer extends JFrame{
int x, y, x0, y0, r, h, olds_x, olds_y, oldm_x, oldm_y, oldh_x, oldh_y,
ss,mm, hh, old_m, old_h, ang;
final double RAD = Math.PI/180;
public ClockPointer(){
super("Java时钟");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Image image = getToolkit().getImage("clock.gif");
setIconImage(image);
setSize(400,400);
setBackground(Color.white);
//setLocation(300,150);
this.setLocationRelativeTo(null);
setResizable(true);
int delay = 1000;
//创建一个监听事件
setVisible(true);
ActionListener drawClock = new ActionListener(){
public void actionPerformed(ActionEvent evt){
repaint();
}
};
//创建一个时间计数器,每一秒触发一次
new Timer(delay, drawClock).start();
}
java.text.SimpleDateFormat fmTime = new java.text.SimpleDateFormat("HH:mm:ss");
//绘制图形
public void paint(Graphics g){
super.paint(g);
g.setFont(null);
Graphics2D g2D = (Graphics2D)g;
Insets insets = getInsets();
int L = insets.left/2, T = insets.top/2;
h = getSize().height;
g.setColor(Color.white);
//画圆
g2D.setStroke(new BasicStroke(2.0f));
g.setColor(Color.gray);
g.drawOval(L+40, T+40, h-80, h-80);
r = h/2 - 40;
x0 = 40 + r - 5 + L;
y0 = 40 + r - 5 - T;
ang = 60;
//绘制时钟上的12个字
for(int i = 1;i = 12;i ++){
x = (int)((r+10)*Math.cos(RAD*ang)+x0);
y = (int)((r+10)*Math.sin(RAD*ang)+y0);
g.setColor(Color.black);
g.drawString(""+i, x, h-y);
ang -=30;
}
//获得现在的时间
Calendar now = new GregorianCalendar();
int nowh = now.get(Calendar.HOUR_OF_DAY);
int nowm = now.get(Calendar.MINUTE);
int nows = now.get(Calendar.SECOND);
String st=fmTime.format(now.getTime());
//在窗体上显示时间
g.setColor(Color.pink);
g.fillRect(L, T, 50, 28);
g.setColor(Color.blue);
g.drawString(st,L+2,T+26);
//计算时间与度数的关系
ss = 90 - nows*6;
mm = 90 - nowm*6;
hh = 90 - nowh*30 - nowm/2;
x0 = r+40+L;
y0 = r+40+T;
g2D.setStroke(new BasicStroke(1.2f));
//擦除秒针
//if(olds_x 0){
// g.setColor(getBackground());
// // g.setColor(Color.gray);
// g.drawLine(x0, y0, olds_x, h-olds_y); // (?)
//}
//绘制秒针
x = (int)(r*0.9*Math.cos(RAD*ss))+x0;
y = (int)(r*0.9*Math.sin(RAD*ss))+y0-2*T;
g.setColor(Color.yellow);
g.drawLine(x0, y0, x, h-y);
olds_x = x;
olds_y = y;
g2D.setStroke(new BasicStroke(2.2f));
//擦除分针
//if(old_m!=mm){
// g.setColor(getBackground());
// g.drawLine(x0,y0,oldm_x,h-oldm_y);
//}
//绘制分针
x = (int)(r*0.7*Math.cos(RAD*mm))+x0;
y = (int)(r*0.7*Math.sin(RAD*mm))+y0-2*T;
g.setColor(Color.green);
g.drawLine(x0,y0,x,h-y);
oldm_x = x;
oldm_y = y;
old_m = mm;
g2D.setStroke(new BasicStroke(3.2f));
//擦除时针
//if(old_h!=hh){
// g.setColor(getBackground());
// g.drawLine(x0,y0,oldh_x,h-oldh_y);
//}
//绘制时针
x = (int)(r*0.5*Math.cos(RAD*hh))+x0;
y = (int)(r*0.5*Math.sin(RAD*hh))+y0-2*T;
g.setColor(Color.red);
g.drawLine(x0,y0,x,h-y);
oldh_x = x;
oldh_y = y;
old_h = hh;
}
public static void main(String[] args){
new ClockPointer();
}
}
//整理一下
java简单时钟
兄弟你也太吝啬了点吧,不给分的。。。
改动一,buf 没有初始化就是用了:
public void run() {
StringBuffer buf = new StringBuffer("");
while (true) {
buf = buf.append(Calendar.HOUR);
buf = buf.append(":");
buf = buf.append(Calendar.MINUTE);
buf = buf.append(":");
buf = buf.append(Calendar.SECOND);
f.getGraphics().drawString(buf.toString(), 0, 0);
buf = new StringBuffer("");
try {
t.sleep(1000);
} catch (Exception e) {}
}
}
改动二:画板尚未初始化就是用 Graphics 对象,肯定也会出现空指针错误:
t = new Thread(new Test());
f.setVisible(true); //先出现画面,在启动线程!
t.start();
能调试成没有 空指针 错误,但你的程序逻辑有问题,不会出现时钟,你还得好好设计设计!
good luck!
怎么用java编写时钟呀?
import
java.util.*;
import
java.awt.*;
import
java.applet.*;
//impelements
Runnable
是线程程序的接口
public
class
Clock
extends
Applet
implements
Runnable
{
Thread
timer
=
null;
//
定义线程实体timer
int
xcenter
=
400,
ycenter
=
50;
int
Radius
=
ycenter
-
5;
public
void
init()
{
resize(400,
125);//
设置时钟程序的窗口大小
setBackground(Color.white);//
设置小应用程序的背景色
}
public
void
paint(Graphics
g)
{
int
xh,
yh,
xm,
ym,
xs,
ys,
s,
m,
h;
String
today;
Date
dat
=
new
Date();
//
定义时间类dat
s
=
dat.getSeconds();
//
获得时间秒
m
=
dat.getMinutes();
//
获得时间分
h
=
dat.getHours();
today
=
dat.toLocaleString();
//
获得字符串时间格式
g.clearRect(0,
0,
size().width,
size().height);
//
消除小应用程序
xcenter
=
xcenter
-
1;
//
向左移动一个像素点
if
(xcenter
-50)
xcenter
=
400;
//
如果xcenter小于-50,则回到初始位置
//
计算秒的坐标
xs
=
(int)
(Math.cos(s
*
3.14f
/
30
-
3.14f
/
2)
*
(Radius
-
5)
+
xcenter);
ys
=
(int)
(Math.sin(s
*
3.14f
/
30
-
3.14f
/
2)
*
(Radius
-
5)
+
ycenter);
//
计算分钟的坐标
xm
=
(int)
(Math.cos(m
*
3.14f
/
30
-
3.14f
/
2)
*
(Radius
-
10)
+
xcenter);
ym
=
(int)
(Math.sin(m
*
3.14f
/
30
-
3.14f
/
2)
*
(Radius
-
10)
+
ycenter);
//
计算小时的坐标
xh
=
(int)
(Math.cos((h
*
30
+
m
/
2)
*
3.14f
/
180
-
3.14f
/
2)
*
(Radius
-
20)
+
xcenter);
yh
=
(int)
(Math.sin((h
*
30
+
m
/
2)
*
3.14f
/
180
-
3.14f
/
2)
*
(Radius
-
20)
+
ycenter);
g.setColor(Color.darkGray);
//
设置颜色
g.drawString("9",
xcenter
-
(Radius
-
5),
ycenter
+
3);
//
显示时钟上的数字‘9’
g.drawString("3",
xcenter
+
(Radius
-
10),
ycenter
+
3);
//
显示时钟上的数字‘3’
g.drawString("12",
xcenter
-
5,
ycenter
-
(Radius
-
13));
//
显示时钟上的数字'12'
g.drawString("6",
xcenter
-
3,
ycenter
+
(Radius
-
10));
//
显示时钟上的数字'6'
g.drawString(today,
0,
125);
//
显示字符串时钟
g.drawLine(xcenter,
ycenter,
xs,
ys);
//
画秒针
g.setColor(Color.blue);
//
设置颜色
g.drawArc(xcenter
-
Radius,
ycenter
-
Radius,
2
*
Radius,
2
*
Radius,
0,
360);
//
画钟
g.drawLine(xcenter,
ycenter
-
1,
xm,
ym);
//
画分针
g.drawLine(xcenter
-
1,
ycenter,
xm,
ym);
//
画分针
g.drawLine(xcenter,
ycenter
-
1,
xh,
yh);
//
画时针
g.drawLine(xcenter
-
1,
ycenter,
xh,
yh);
//
画时针
}
public
void
start()
{
if
(timer
==
null)
{
timer
=
new
Thread(this);
//
生成Thread(多线程程序)的对象实体
timer.start();
//
启动生成的线程
}
}
public
void
stop()
{
timer.stop();
//
停止线程的工作
timer
=
null;
//
放掉Thread对象
}
public
void
run()
//
改方法用来定义线程体,一旦线程被启动执行,就开始执行这个方法
{
while
(timer
!=
null)
{
try
{
Thread.sleep(150);
//
使当前正在执行的线程进入睡眠时间由参数millis确定,
//
单位时间是毫秒,当这个时间过去,线程即可运行的
while
(timer
!=
null)
{
try
{
Thread.sleep(150);//
使用当前正在执行的线程进入睡眠时间由参数
//
millis确定,单位是毫秒,当这个时间过去,线程即为可运行的
}
catch
(InterruptedException
e)
{
}
repaint();
//
repaint所做的事其实是去调用方法uadate重画效应用程序
}
timer
=
null;
}
catch
(InterruptedException
e)
{
}
}
}
//
所做的工作是先将整个效应用程序区域清除,再去调用paint,完成重画的动作
public
void
update(Graphics
g)
{
paint(g);
}
}
java输入时间显示钟表;要求输入一个时分秒,输出一个静态的钟表,显示你输入的时间。
按照你的要求编写的java输入时间显示钟表的程序如下:
import java.awt.BorderLayout;import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Clock extends JFrame implements ActionListener{ JLabel jl_hour=new JLabel("时");
JLabel jl_minute=new JLabel("分");
JLabel jl_second=new JLabel("秒");
JTextField jtf_hour=new JTextField(10);
JTextField jtf_minute=new JTextField(10);
JTextField jtf_second=new JTextField(10);
JButton jb_input=new JButton("显示");
JPanel jp_input=new JPanel();
ClockPanel jp_clock=new ClockPanel();
Clock(){
super("Clock");
jb_input.addActionListener(this);
jp_input.add(jtf_hour);jp_input.add(jl_hour);
jp_input.add(jtf_minute);jp_input.add(jl_minute);
jp_input.add(jtf_second);jp_input.add(jl_second);
jp_input.add(jb_input);
add(jp_input,BorderLayout.NORTH);
add(jp_clock,BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,400);
this.setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new Clock();
}
public void actionPerformed(ActionEvent ae) {
if(ae.getSource()==jb_input){
int Hour=Integer.parseInt(jtf_hour.getText());
int Minute=Integer.parseInt(jtf_minute.getText());
int Second=Integer.parseInt(jtf_second.getText());
jp_clock.setHour(Hour);
jp_clock.setMinute(Minute);
jp_clock.setSecond(Second);
jp_clock.repaint();
}
}
}
class ClockPanel extends JPanel {
private double CenterX,CenterY;
private double Radius=150;
private double HPointX,HPointY,MPointX,MPointY,SPointX,SPointY;
private int Hour,Minute,Second;
private final double PI=3.1415926;
public int getHour() {
return Hour;
}
public void setHour(int hour) {
Hour = hour;
}
public int getMinute() {
return Minute;
}
public void setMinute(int minute) {
Minute = minute;
}
public int getSecond() {
return Second;
}
public void setSecond(int second) {
Second = second;
}
ClockPanel(){
this.Hour=0;
this.Minute=0;
this.Second=0;
}
ClockPanel(int Hour,int Minute,int Second){
this.Hour=Hour;
this.Minute=Minute;
this.Second=Second;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
CenterX=this.getWidth()/2;
CenterY=this.getHeight()/2;
double HRadian=(PI/6)*Hour+(PI/360)*Minute+(PI/21600)*Second;
double MRadian=(PI/30)*Minute+(PI/1800)*Second;
double SRadian=(PI/30)*Second;
HPointX=CenterX+Radius*0.6*Math.sin(HRadian);
HPointY=CenterY-Radius*0.6*Math.cos(HRadian);
MPointX=CenterX+Radius*0.8*Math.sin(MRadian);
MPointY=CenterY-Radius*0.8*Math.cos(MRadian);
SPointX=CenterX+Radius*Math.sin(SRadian);
SPointY=CenterY-Radius*Math.cos(SRadian);
g.drawOval((int)(CenterX-Radius), (int)(CenterY-Radius), (int)(2*Radius),(int)(2*Radius));
g.drawString("12",(int)(CenterX),(int)(CenterY-Radius)+10);
g.drawString("3",(int)(CenterX+Radius)-6 , (int)(CenterY));
g.drawString("6", (int)(CenterX), (int)(CenterY+Radius));
g.drawString("9",(int)(CenterX-Radius), (int)(CenterY));
g.drawLine((int)(CenterX), (int)(CenterY), (int)(SPointX), (int)(SPointY));
g.drawLine((int)(CenterX), (int)(CenterY), (int)(MPointX), (int)(MPointY));
g.drawLine((int)(CenterX), (int)(CenterY), (int)(HPointX), (int)(HPointY));
}
}
JAVA获取时钟的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Java获取小时、JAVA获取时钟的信息别忘了在本站进行查找喔。
发布于:2022-11-22,除非注明,否则均为
原创文章,转载请注明出处。