展开全部
完整的
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.Timer;
///定义类TestClock继承JFrame类实现ActionListener接口
class TestClock extends JFrame implements ActionListener {
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;// 这个应该是算一个弧度吧
// 构造函数32313133353236313431303231363533e78988e69d8331333332393365创建一个窗体
public TestClock() {
super("模拟时钟");
setDefaultCloseOperation(3);// 等同于this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setSize(500, 250);
setBackground(Color.white);
setLocation(300, 150);
setResizable(true);// //设置窗口能否拉伸
setVisible(true);// /窗口能见
int delay = 1000;
// 创建一个监听事件
ActionListener drawTestClock = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
repaint();
}
};
// 创建一个时间计数器
new Timer(delay, drawTestClock).start();
}
// 实现ActionListener接口必须实现的方法
public void actionPerformed(ActionEvent e) {
}
// 绘制图形
public void paint(Graphics g) {
Color c = g.getColor();
Insets insets = getInsets();
int L = (insets.left- 50) / 2, T = (insets.top - 50 ) / 2;// 长高
g.setColor(Color.WHITE);
g.drawRect(0, 0, L, T );
Graphics2D g2D = (Graphics2D) g;// 将图形对象强制转换为类型
h = getSize().height;
g.setColor(Color.gray);
// 画圆
g2D.setStroke(new BasicStroke(3.9f));// 圈的线段的粗细
int qx = L + 40, qy = T + 40;
int qw = h - 80;
g.drawOval(qx, qy, qw, qw);// 圆的位置
r = h / 2 - 40;// 圆的半径
x0 = 40 + r - 5 + L;
y0 = 40 + r - 5 - T;
ang = 60;
// ///
g.setFont(new Font("SansSerit", Font.BOLD, 12));// 使字体变粗
g.setColor(new Color(255, 10, 190));
g.drawString(" this is our clock", 200, 100);
// 绘制时钟上的12个汉字
for (int i = 1; i <= 12; i++) {
g.setColor(Color.blue);
x = (int) ((r + 10) * Math.cos(RAD * ang) + x0);
y = (int) ((r + 10) * Math.sin(RAD * ang) + y0);
g.drawString("" + i, x, h - y);
ang -= 30;
}
// 获得现在时间,年月日没弄好
JButton a = new JButton("设置时间");
Calendar now = new GregorianCalendar();
Date dt = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");// 设置日期格式
g.setColor(Color.yellow);
g.fillRoundRect(qx, qy+qw+10, qw, 30, 30, 30);// 实心椭圆
g.setColor(Color.RED);
g.drawString(df.format(dt), (qx+qw-40)/2, qy+qw+30);
int nown = now.get(Calendar.YEAR);
int nowy = now.get(Calendar.MONTH);
int nowd = now.get(Calendar.DATE);
int nowh = now.get(Calendar.HOUR_OF_DAY);
int nowm = now.get(Calendar.MINUTE);
int nows = now.get(Calendar.SECOND);
int nowmi = now.get(Calendar.MILLISECOND);
String s;
if (nowh < 10)
s = "0" + nowh;
else
s = "" + nowh;
if (nowy < 10)
s += "-0" + nowy;
else
s = "-" + nowy;
String st;
if (nowh < 10)
st = "0" + nowh;
else
st = "" + nowh;
if (nowm < 10)
st += ":0" + nowm;
else
st += ":" + nowm;
if (nows < 10)
st += ":0" + nows;
else
st += ":" + nows;
String str;
if (nowh < 10)
str = "0" + nowh;
else
str = "" + nowh;
if (nowm < 10)
str += ":0" + nowm;
else
str += ":" + nowm;
if (nows < 10)
str = ":0" + nows;
else
str += ":" + nows;
if (nowmi < 10)
str += ":0" + str;
else
str += ":" + nowmi;
// 在窗体上显示时间
g.setColor(Color.green);
g.drawLine(0, 30, 500, 30);
g.drawLine(0, 10, 200, 20);
g.setColor(Color.pink);
g.fill3DRect(300, 50, 100, 30, false);// 空心矩形
g.setColor(Color.pink);
g.drawString(st, 330, 70);
g.setColor(Color.yellow);
g.fillRoundRect(310, 100, 100, 30, 30, 30);// 实心椭圆
g.setColor(Color.green);
g.drawString(str, 330, 120);
// 计算时间与度数的关系
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.drawLine(x0, y0, olds_x, h - olds_y);
} else {
old_m = mm;
old_h = hh;
}
// 绘制秒针
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.4f));
// 擦除时针
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;
g.setColor(c);
}
public static void main(String[] args) {
new TestClock();
}
}
本回答由提问者推荐
已赞过
已踩过<
你对这个回答的评价是?
评论
收起