java实验一:写一个桌面时钟
一共有三个类:
这个是第一个,主函数类:
public class Programe extends JFrame { /* * 四个部分: 1.画出窗体和面板 2.画出指针 3.时间转换的算法 4.让指针动起来 */ public static void main(String[] string) { Programe frame = new Programe();// 创建窗体对象 frame.setVisible(true);// 设置窗体可见,没有该语句,窗体将不可见,此语句必须有,否则没有界面就没有意义 } public Programe() { setUndecorated(false);// 打开窗体修饰 setAlwaysOnTop(true);// 窗体置顶 getContentPane().setLayout(new BorderLayout()); // 在窗体的基础上加入面板:Panel 而后就可以在面板上进行其他操作 // 指定的组件之间的水平间距构造一个边界布局 setBounds(100, 30, 217, 257);// 用于设置窗口尺寸和位置; ClockPaint clockPaint = new ClockPaint();// 创建时钟面板 getContentPane().add(clockPaint); new Thread() {// 继承Thread类创建线程,更新时钟面板界面 @Override public void run() {// 重写run方法 try { while (true) { sleep(1000);// 休眠1秒 clockPaint.repaint();// 重新绘制时钟面板界面 } } catch (InterruptedException e) { e.printStackTrace();// 在命令行打印异常信息在程序中出错的位置及原因。 } } }.start(); } }
这个是第二个,画时钟的类:
package clock; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.ImageIcon; import javax.swing.JPanel; public class ClockPaint extends JPanel { private static final BasicStroke H = new BasicStroke(4);// 指针粗细 private static final BasicStroke M = new BasicStroke(3); private static final BasicStroke S = new BasicStroke(2); private final static int secLen = 60; // 指针长度 private final static int minuesLen = 55; private final static int hoursLen = 36; ImageIcon background;// 背景 private int X;// 中心坐标 private int Y; public ClockPaint() { background = new ImageIcon(getClass().getResource("时钟.jpg"));// 加载图片 int Width = background.getIconWidth();// 获取图片宽度 X = Width / 2 + 2;// 获取图片中间坐标 int Height = background.getIconHeight();// 获取图片长度 Y = Height / 2 - 8;// 获取图片中间坐标 setPreferredSize(new Dimension(Width, Height));// 设置最好的大小(固定用法) } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.drawImage(background.getImage(), 0, 0, this); ClockData data = new ClockData(secLen, minuesLen, hoursLen); // 绘制时针 g2.setStroke(H);// 设置时针的宽度 g2.setColor(Color.RED);// 设置时针的颜色 g2.drawLine(X, Y, X + data.hX, Y - data.hY);// 绘制时针 // 绘制分针 g2.setStroke(M);// 设置分针的宽度 g2.setColor(Color.orange);// 设置时针的颜色 g2.drawLine(X, Y, X + data.mX, Y - data.mY);// 绘制分针 // 绘制秒针 g2.setStroke(S);// 设置秒针的宽度 g2.setColor(Color.GREEN);// 设置时针的颜色 g2.drawLine(X, Y, X + data.sX, Y - data.sY);// 绘制秒针 // 绘制中心圆 g2.setColor(Color.BLUE); g2.fillOval(X - 5, Y - 5, 10, 10); } }
这个是第三个,获取时钟的数据:
package clock; import static java.util.Calendar.HOUR; import static java.util.Calendar.MINUTE; import static java.util.Calendar.SECOND; import java.util.Calendar; public class ClockData { public int sX, sY, mX, mY, hX, hY; public ClockData(int secLen, int minuesLen, int hoursLen) { Calendar calendar = Calendar.getInstance();// 获取日历对象 int sec = calendar.get(SECOND);// 获取秒值 int minutes = calendar.get(MINUTE);// 获取分值 int hours = calendar.get(HOUR);// 获取时值 // 计算角度 int hAngle = hours * 360 / 12 + (minutes / 2) ;// 时针角度(每分钟时针偏移角度) int sAngle = sec * 6; // 秒针角度 int mAngle = minutes * 6 + (sec / 10);// 分针角度 // 计算秒针、分针、时针指向的坐标 sX = (int) (secLen * Math.sin(Math.toRadians(sAngle)));// 秒针指向点的X坐标(将角度转换为弧度) sY = (int) (secLen * Math.cos(Math.toRadians(sAngle))); // 秒针指向点的Y坐标 mX = (int) (minuesLen * Math.sin(Math.toRadians(mAngle))); // 分针指向点的X坐标 mY = (int) (minuesLen * Math.cos(Math.toRadians(mAngle))); // 分针指向点的Y坐标 hX = (int) (hoursLen * Math.sin(Math.toRadians(hAngle))); // 时针指向点的X坐标 hY = (int) (hoursLen * Math.cos(Math.toRadians(hAngle))); // 时针指向点的Y坐标 } }
以上参考了其他大佬的代码,等我找到原地址再补上:D
做了部分修改,加了部分注释,java小白还请客官您多多包含呀!

浙公网安备 33010602011771号