怎样用java制作一个钟表类?

Python013

怎样用java制作一个钟表类?,第1张

public class Horologe{

private int hour

private int minute

private int second

public void setTime(int hour,int minute,int second){ //设置时间的方法

this.hour = hour//传进的参数赋值给成员变量

this.minute = minute

this.second = second

}

public String showTime(){ //显示时间的方法

return "小时:"+hour+" 分钟:"+minute+" 秒: "+second

}

}

希望能够帮到你

按照你的要求编写的java输入时间显示钟表的程序如下:

import java.awt.BorderLayoutimport 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))

}

}

long base=new GregorianCalendar(0,0,0,0,0,0).getTime().getTime()定义一个0毫秒的基数,为了后面使用format做准备。

DateFormat df=new SimpleDateFormat("HH:mm:ss")设置格式化的样式

for循环是安装一天时间长度的总共有60*60*12*2秒(这个因为要精确到秒),在每个秒长度时间上,分别获得时针、分钟和秒针所在表盘的位置(表盘整个圆是60秒)。

然会判断三个针位置是否是一样的,如果一样就输入该时间。