日期:2014-05-20 浏览次数:20801 次
package Forth; //一个模拟时钟的程序,下面的是面板上的内容 import java.awt.*; import java.util.*; import java.util.concurrent.TimeUnit; import javax.swing.*; public class Clock extends JPanel implements Runnable { private JPanel numberPanel = new JPanel(); //用来绘制纯数字的时间 private JLabel numberFormatLabel = new JLabel();//用来存放数字内容的Label private JPanel clockPanel = new JPanel();//用来绘制模拟时钟的面板 private final Point R = new Point(230, 220); private final int RADIUS = 200; private final int SECOND_LENGTH = 180; private final int MINITE_LENGTH = 130; private final int HOUR_LENGTH = 100; private Point minute = new Point(); private Point second = new Point(); private Point hour = new Point(); private Image offScreenImage = null; public Clock() { super(); this.setLayout(new BorderLayout()); numberFormatLabel.setFont(new Font("微软雅黑", Font.BOLD, 33)); numberFormatLabel.setForeground(Color.pink); numberFormatLabel.setHorizontalAlignment(SwingConstants.CENTER); numberFormatLabel.setHorizontalTextPosition(SwingConstants.CENTER); numberPanel.add(numberFormatLabel); this.add(numberPanel, BorderLayout.NORTH);//存放数字的面板放在上面 this.add(clockPanel, BorderLayout.CENTER);//存放模拟时钟的面版放在下面 } @Override//绘制时钟的部分 public void update(Graphics g) { super.update(g); if (this.offScreenImage == null) { offScreenImage = clockPanel.createImage(500, 500); } Graphics2D g2 = (Graphics2D) offScreenImage.getGraphics(); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setColor(Color.CYAN); g2.fillOval(R.x - this.RADIUS, R.y - this.RADIUS, this.RADIUS * 2, this.RADIUS * 2); g2.setColor(Color.green); g2.fillOval(R.x - 10, R.y - 10, 20, 20); g2.setColor(Color.red); g2.drawLine(R.x, R.y, second.x, second.y); g2.setColor(Color.BLUE); g2.drawLine(R.x, R.y, minute.x, minute.y); g2.setColor(Color.magenta); g2.drawLine(R.x, R.y, hour.x, hour.y); //paint(g2); g.drawImage(offScreenImage, 0, 0, null); } public void run() { while (true) { try { Date date = new Date(); String timeStr = String.format("%tH:%tM:%tS %tp", date, date, date, date); numberFormatLabel.setText(timeStr); Calendar calendar = Calendar.getInstance(); int s = calendar.get(Calendar.SECOND); int m = calendar.get(Calendar.MINUTE); int h = calendar.get(Calendar.HOUR); //用来计算时钟的坐标 System.out.println(s); second.x = (int) (R.x + this.SECOND_LENGTH * Math.sin(s * Math.PI / 30)); second.y = (int) (R.y - this.SECOND_LENGTH * Math.cos(s * Math.PI / 30)); minute.x = (int) (R.x + this.MINITE_LENGTH * Math.sin(m * Math.PI / 30)); minute.y = (int) (R.y - this.MINITE_LENGTH * Math.cos(m * Math.PI / 30)); hour.x = (int) (R.x + this.HOUR_LENGTH * Math.sin(h * Math.PI / 6)); hour.y = (int) (R.y - this.HOUR_LENGTH * Math.cos(h * Math.PI / 6)); this.update(clockPanel.getGraphics()); TimeUnit.SECONDS.sleep(1); } catch (Exception e) { e.printStackTrace(); } } } }