Micro230 | Destiny Timer Project





This project was made entirely in JAVA, no external librarys included. This was made to somewhat replicate the Destiny countdown timer from "Stargate Universe" but as a clock rather than a countdown timer. This is eventually going to be used on my Raspberry Pi as a background program to a little LCD monitor, so I can use it as a clock in my studio. Source code is below. "Anquietas" font required.
Anquietas Font Link


package destinytimer;

import java.awt.Color;
import java.awt.Font;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.GridBagLayout;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;

import java.text.DateFormat;
import java.text.SimpleDateFormat;

import java.util.Calendar;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
*
* @author Micro230
*/
public class DestinyTimer {
	//Change number at end of "device" line to change monitor
	static GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0];
	static final DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SS");
	
	public static void main(String[] args) {
		//Create GUI
		JFrame frame = new JFrame();
		JPanel panel = new JPanel();
		JLabel timer = new JLabel("xx:xx:xx:xxx");

		//Fullscreen
		device.setFullScreenWindow(frame);

		//Center Vertically
		panel.setLayout(new GridBagLayout());
		//Font and Add Timer
		timer.setFont(new Font("Anquietas", Font.PLAIN, 50));
		panel.add(timer);
		//Style
		panel.setBackground(Color.black);
		timer.setForeground(Color.white);
		//Frame Finalize
		frame.addComponentListener(new ComponentListener() {

			@Override
			public void componentHidden(ComponentEvent arg0) {}
			@Override
			public void componentMoved(ComponentEvent arg0) {}
			@Override
			public void componentResized(ComponentEvent arg0) {
				timer.setFont(new Font("Anquietas", Font.PLAIN, (frame.getWidth() + frame.getHeight()) / 10));
				frame.getContentPane().revalidate();
			}
			@Override
			public void componentShown(ComponentEvent e) {}
		});
		frame.setContentPane(panel);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		//Reinitalize Font after Frame Loads
		timer.setFont(new Font("Anquietas", Font.PLAIN, (frame.getWidth() + frame.getHeight()) / 10));
		frame.getContentPane().revalidate();
		//Update
		while(true) {
			String mil = dateFormat.format(Calendar.getInstance().getTime()).split(":")[3];
			String time = dateFormat.format(Calendar.getInstance().getTime());
			if(mil.length() > 2) {
				timer.setText(time.substring(0, time.length()-1));
			}
			else{
				timer.setText(time);
			}
			timer.updateUI();
		}
	}
}