import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; import java.util.*; import java.io.*; public class hDigitalClock extends JPanel implements Runnable { int size = 7; int totSecs; long lastTime = 0, thisTime; digitalNumber h1, m1, m2, s1; GregorianCalendar cal; Thread th; public hDigitalClock() { h1 = new digitalNumber(50, 100, size); m1 = new digitalNumber(150, 100, size); m2 = new digitalNumber(230, 100, size); s1 = new digitalNumber(330, 100, size); setBackground(Color.WHITE); setLayout(new BorderLayout()); start(); } public void start() { if (th == null) { th = new Thread(this); th.start(); } } public void run() { while (th != null) { try { totSecs = setSecs(); showTime(); repaint(); Thread.sleep(0, 439453133); } catch (Exception e) { } } } public void stop() { if (th != null) th = null; } public int setSecs() { cal = new GregorianCalendar(); int h, m, s; h = cal.get(Calendar.HOUR) * 3600; if (cal.get(Calendar.AM_PM) == Calendar.PM) h += 3600 * 12; m = cal.get(Calendar.MINUTE) * 60; s = cal.get(Calendar.SECOND); return h+m+s; } public int divide(int a, int b) { int z = 0; int i = a; while (i >= b) { i = i - b; z++; } return z; } public void showTime() { int secs, hours, minute1, minute2; if(totSecs > 86399) totSecs=0; secs = (int)(totSecs / 1.3183594); hours = divide(secs, 4096); secs = secs - (hours * 4096); minute1 = divide(secs, 256); secs = secs - (minute1 * 256); minute2 = divide(secs, 16); secs = secs - (minute2 * 16); //Convert and store each place of the time to its proper value h1.setNumber(hours); m1.setNumber(minute1); m2.setNumber(minute2); s1.setNumber(secs); } public void showDots(Graphics2D g2) { g2.setColor(Color.RED); g2.fill(new Rectangle2D.Double(128, 65, 14, 14)); g2.fill(new Rectangle2D.Double(128, 135, 14, 14)); g2.fill(new Rectangle2D.Double(308, 65, 14, 14)); g2.fill(new Rectangle2D.Double(308, 135, 14, 14)); //Create the dots between the hours and the minutes, and between the //minutes and the seconds } public void paint(Graphics g) { super.paint(g); Graphics2D g2 = (Graphics2D)g; h1.drawNumber(g2); m1.drawNumber(g2); m2.drawNumber(g2); s1.drawNumber(g2); showDots(g2); } public static void main(String[] a) { //Creates our window and places the objects in it accordingly JFrame f = new JFrame("Digital Clock"); f.setSize(450, 220); f.setTitle("Hexadecimal Clock"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); f.getContentPane().add(new hDigitalClock()); } } class digitalNumber { int x, y; int k; led[] leds; public digitalNumber(int x, int y, int k) { //Draws the LEDs uniformly in their proper positions on the display this.x = x; this.y = y; this.k = k; leds = new led[7]; leds[0] = new led(x, y, "vert"); leds[1] = new led(x, y+10*k, "vert"); leds[2] = new led(x+8*k, y, "vert"); leds[3] = new led(x+8*k, y+10*k, "vert"); leds[4] = new led(x+2*k, y-9*k, "horiz"); leds[5] = new led(x+2*k, y+k, "horiz"); leds[6] = new led(x+2*k, y+11*k, "horiz"); } public void setNumber(int num) { //Set each LED of the display to its hex number 0-F //each if branch handles one possibility of the state //of the LED if(num == 0) { leds[0].setState(true); //top left LED leds[1].setState(true); //bottom left LED leds[2].setState(true); //top right LED leds[3].setState(true); //bottom right LED leds[4].setState(true); //top center LED leds[5].setState(false); //middle center LED leds[6].setState(true); //bottom center LED } else if(num == 1) { leds[0].setState(false); leds[1].setState(false); leds[2].setState(true); leds[3].setState(true); leds[4].setState(false); leds[5].setState(false); leds[6].setState(false); } else if(num == 2) { leds[0].setState(false); leds[1].setState(true); leds[2].setState(true); leds[3].setState(false); leds[4].setState(true); leds[5].setState(true); leds[6].setState(true); } else if(num == 3) { leds[0].setState(false); leds[1].setState(false); leds[2].setState(true); leds[3].setState(true); leds[4].setState(true); leds[5].setState(true); leds[6].setState(true); } else if(num == 4) { leds[0].setState(true); leds[1].setState(false); leds[2].setState(true); leds[3].setState(true); leds[4].setState(false); leds[5].setState(true); leds[6].setState(false); } else if(num == 5) { leds[0].setState(true); leds[1].setState(false); leds[2].setState(false); leds[3].setState(true); leds[4].setState(true); leds[5].setState(true); leds[6].setState(true); } else if(num == 6) { leds[0].setState(true); leds[1].setState(true); leds[2].setState(false); leds[3].setState(true); leds[4].setState(true); leds[5].setState(true); leds[6].setState(true); } else if(num == 7) { leds[0].setState(false); leds[1].setState(false); leds[2].setState(true); leds[3].setState(true); leds[4].setState(true); leds[5].setState(false); leds[6].setState(false); } else if(num == 8) { leds[0].setState(true); leds[1].setState(true); leds[2].setState(true); leds[3].setState(true); leds[4].setState(true); leds[5].setState(true); leds[6].setState(true); } else if(num == 9) { leds[0].setState(true); leds[1].setState(false); leds[2].setState(true); leds[3].setState(true); leds[4].setState(true); leds[5].setState(true); leds[6].setState(true); } else if(num == 10) { leds[0].setState(true); leds[1].setState(true); leds[2].setState(true); leds[3].setState(true); leds[4].setState(true); leds[5].setState(true); leds[6].setState(false); } else if(num == 11) { leds[0].setState(true); leds[1].setState(true); leds[2].setState(false); leds[3].setState(true); leds[4].setState(false); leds[5].setState(true); leds[6].setState(true); } else if(num == 12) { leds[0].setState(true); leds[1].setState(true); leds[2].setState(false); leds[3].setState(false); leds[4].setState(true); leds[5].setState(false); leds[6].setState(true); } else if(num == 13) { leds[0].setState(false); leds[1].setState(true); leds[2].setState(true); leds[3].setState(true); leds[4].setState(false); leds[5].setState(true); leds[6].setState(true); } else if(num == 14) { leds[0].setState(true); leds[1].setState(true); leds[2].setState(false); leds[3].setState(false); leds[4].setState(true); leds[5].setState(true); leds[6].setState(true); } else if(num == 15) { leds[0].setState(true); leds[1].setState(true); leds[2].setState(false); leds[3].setState(false); leds[4].setState(true); leds[5].setState(true); leds[6].setState(false); } } public void drawNumber(Graphics2D g2) { for(int i=0; i<7; i++) { leds[i].render(g2); } } class led { int x, y; Polygon p; String type; public led(int x, int y, String type) { this.x = x; this.y = y; this.type = type; p = new Polygon(); if(type == "vert") { p.addPoint(x, y); p.addPoint(x+k, y+k); p.addPoint(x+2*k, y); p.addPoint(x+2*k, y-8*k); p.addPoint(x+k, y-9*k); p.addPoint(x, y-8*k); } if(type == "horiz") { p.addPoint(x, y); p.addPoint(x+k, y+k); p.addPoint(x+5*k, y+k); p.addPoint(x+6*k, y); p.addPoint(x+5*k, y-k); p.addPoint(x+k, y-k); } } public void render(Graphics2D g2){ //fills the polygons for the LEDs with the color specified in the //setColor method g2.setColor(new Color.RED); g2.fillPolygon(p); } }