Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to draw a clock with JavaFX 2?

Tags:

java

javafx-2

Given an hour and a minute, I want to draw an analogous clock.

I was able to create a Group with a Circle, but I don't know which class to use for the hands and how to place and rotate them.

like image 711
Cephalopod Avatar asked May 10 '12 20:05

Cephalopod


2 Answers

  1. Add 3 lines (for hour, minute, second) with different strokes and lengths to your Group.
  2. Place one end of each line in the center of your circle and the other end of each line pointing straight up at 12 o'clock.
  3. Create a timeline which triggers a keyframe each second.
  4. In the keyframe:
    • Calculate the degree of rotation for the hands based on the current time.
    • Rotate the hands the required amount.
  5. Set the timeline to cycle indefinitely.
  6. Place your Group in a Scene and add the Scene to a Stage.
  7. Play your timeline.

I created a sample app implementing the above principles.

enter image description here

Update

In response to criticism of the coding style used in the sample app, I created a refactored sample app which uses a more functional coding style.

Additionally the jfxtras project has an AnalogueClock control. Here is the gist of how to use the jfxtras clock.

like image 58
jewelsea Avatar answered Nov 03 '22 00:11

jewelsea


Netbeans 7.1.2 is bundled with sample applications. In JavaFX part there is a StopWatch sample application. Have a look at it, it can give you a great clue.

like image 26
Uluk Biy Avatar answered Nov 03 '22 00:11

Uluk Biy