├── .gitignore
├── README.md
├── TimingFramework-0.55.jar
├── build.xml
├── build
├── built-jar.properties
└── classes
│ └── com
│ └── raven
│ ├── event
│ ├── EventTimeChange.class
│ ├── EventTimePicker.class
│ └── EventTimeSelected.class
│ └── swing
│ ├── TimeComponent$1.class
│ ├── TimeComponent$2.class
│ ├── TimeComponent$3.class
│ ├── TimeComponent.class
│ ├── TimePicker$1.class
│ ├── TimePicker$10.class
│ ├── TimePicker$2.class
│ ├── TimePicker$3.class
│ ├── TimePicker$4.class
│ ├── TimePicker$5.class
│ ├── TimePicker$6.class
│ ├── TimePicker$7.class
│ ├── TimePicker$8.class
│ ├── TimePicker$9.class
│ ├── TimePicker.class
│ ├── TimePickerButton$1.class
│ ├── TimePickerButton$2.class
│ ├── TimePickerButton.class
│ ├── TimePickerLabel.class
│ └── TimePickerMenu.class
├── lib
├── TimingFramework-0.55.jar
└── swing-time-picker.jar
├── manifest.mf
├── nbproject
├── build-impl.xml
├── genfiles.properties
├── private
│ ├── private.properties
│ └── private.xml
├── project.properties
└── project.xml
├── src
└── com
│ └── raven
│ ├── event
│ ├── EventTimeChange.java
│ ├── EventTimePicker.java
│ └── EventTimeSelected.java
│ └── swing
│ ├── TimeComponent.java
│ ├── TimePicker.form
│ ├── TimePicker.java
│ ├── TimePickerButton.java
│ ├── TimePickerLabel.java
│ └── TimePickerMenu.java
└── test
└── testing
├── Main.form
└── Main.java
/.gitignore:
--------------------------------------------------------------------------------
1 | /nbproject/private/
2 | /build/
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # java-swing-timepicker
2 | Date : 29/08/2021
3 | For more Visit my youtube : https://www.youtube.com/c/HelloWorld-Raven/featured
4 |
5 | 
6 |
7 | ## Method
8 | Method Name | Description
9 | ----------- | ------------
10 | public void now(); | Set time picker to current time now
11 | public String getSelectedTime(); | Get time picker selected
12 | public void setDisplayText(JTextField displayText); | display currnet time picker to jtextfield
13 | public void setForeground(Color color); | set color to time picker
14 | public void setSelectedTime(Date date); | set time picker selected time to specific time
15 | public void addEventTimePicker(EventTimePicker event); | this event run when time selected change
16 | public void addActionListener(ActionListener event); | this event run when time picker is current show popup and user click ok
17 | public void showPopup(Component com, int x, int y); | to popup time picker
18 | public void set24hourMode(boolean value); | value true for 24 hour mode
19 |
20 | Support me by subscribe youtube channel
21 |
22 |
--------------------------------------------------------------------------------
/TimingFramework-0.55.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/TimingFramework-0.55.jar
--------------------------------------------------------------------------------
/build.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Builds, tests, and runs the project swing-time-picker.
12 |
13 |
73 |
74 |
--------------------------------------------------------------------------------
/build/built-jar.properties:
--------------------------------------------------------------------------------
1 | #Thu, 29 Jun 2023 17:15:04 +0700
2 |
3 |
4 | E\:\\Raven\\git\\java-swing-timepicker=
5 |
--------------------------------------------------------------------------------
/build/classes/com/raven/event/EventTimeChange.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/event/EventTimeChange.class
--------------------------------------------------------------------------------
/build/classes/com/raven/event/EventTimePicker.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/event/EventTimePicker.class
--------------------------------------------------------------------------------
/build/classes/com/raven/event/EventTimeSelected.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/event/EventTimeSelected.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimeComponent$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimeComponent$1.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimeComponent$2.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimeComponent$2.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimeComponent$3.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimeComponent$3.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimeComponent.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimeComponent.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePicker$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePicker$1.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePicker$10.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePicker$10.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePicker$2.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePicker$2.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePicker$3.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePicker$3.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePicker$4.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePicker$4.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePicker$5.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePicker$5.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePicker$6.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePicker$6.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePicker$7.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePicker$7.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePicker$8.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePicker$8.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePicker$9.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePicker$9.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePicker.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePicker.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePickerButton$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePickerButton$1.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePickerButton$2.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePickerButton$2.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePickerButton.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePickerButton.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePickerLabel.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePickerLabel.class
--------------------------------------------------------------------------------
/build/classes/com/raven/swing/TimePickerMenu.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/build/classes/com/raven/swing/TimePickerMenu.class
--------------------------------------------------------------------------------
/lib/TimingFramework-0.55.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/lib/TimingFramework-0.55.jar
--------------------------------------------------------------------------------
/lib/swing-time-picker.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DJ-Raven/java-swing-timepicker/98c7611afc05c8d50441772e26098bc22410ccb4/lib/swing-time-picker.jar
--------------------------------------------------------------------------------
/manifest.mf:
--------------------------------------------------------------------------------
1 | Manifest-Version: 1.0
2 | X-COMMENT: Main-Class will be added automatically by build
3 |
4 |
--------------------------------------------------------------------------------
/nbproject/build-impl.xml:
--------------------------------------------------------------------------------
1 |
2 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 | Must set src.dir
292 | Must set test.src.dir
293 | Must set build.dir
294 | Must set dist.dir
295 | Must set build.classes.dir
296 | Must set dist.javadoc.dir
297 | Must set build.test.classes.dir
298 | Must set build.test.results.dir
299 | Must set build.classes.excludes
300 | Must set dist.jar
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 |
435 |
436 |
437 |
438 |
439 |
440 |
441 |
442 |
443 |
444 |
445 |
446 |
447 |
448 |
449 |
450 |
451 |
452 |
453 |
454 |
455 |
456 |
457 |
458 |
459 |
460 |
461 |
462 |
463 |
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 |
472 | Must set javac.includes
473 |
474 |
475 |
476 |
477 |
478 |
479 |
480 |
481 |
482 |
483 |
484 |
485 |
486 |
487 |
488 |
489 |
490 |
491 |
492 |
493 |
494 |
495 |
496 |
497 |
498 |
499 |
500 |
501 |
502 |
503 |
504 |
505 |
506 |
507 |
508 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 |
535 |
536 |
537 |
538 |
539 |
540 |
541 |
542 |
543 |
544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 |
556 |
557 |
558 |
559 |
560 |
561 |
562 |
563 |
564 |
565 |
566 |
567 |
568 |
569 |
570 |
571 |
572 |
573 |
574 |
575 |
576 |
577 |
578 |
579 |
580 |
581 |
582 |
583 |
584 |
585 |
586 |
587 |
588 |
589 |
590 |
591 |
592 |
593 |
594 |
595 |
596 |
597 |
598 |
599 |
600 |
601 |
602 |
603 |
604 |
605 |
606 |
607 |
608 |
609 |
610 |
611 |
612 |
613 |
614 |
615 |
616 |
617 |
618 |
619 |
620 |
621 |
622 |
623 |
624 |
625 |
626 |
627 |
628 |
629 |
630 |
631 |
632 |
633 |
634 |
635 |
636 |
637 |
638 |
639 |
640 |
641 |
642 |
643 |
644 |
645 | No tests executed.
646 |
647 |
648 |
649 |
650 |
651 |
652 |
653 |
654 |
655 |
656 |
657 |
658 |
659 |
660 |
661 |
662 |
663 |
664 |
665 |
666 |
667 |
668 |
669 |
670 |
671 |
672 |
673 |
674 |
675 |
676 |
677 |
678 |
679 |
680 |
681 |
682 |
683 |
684 |
685 |
686 |
687 |
688 |
689 |
690 |
691 |
692 |
693 |
694 |
695 |
696 |
697 |
698 |
699 |
700 |
701 |
702 |
703 |
704 |
705 |
706 |
707 |
708 |
709 |
710 |
711 |
712 |
713 |
714 |
715 |
716 |
717 |
718 |
719 |
720 |
721 |
722 |
723 |
724 |
725 |
726 |
727 |
728 |
729 |
730 |
731 |
732 |
733 |
734 |
735 |
736 |
737 |
738 |
739 |
740 |
741 |
742 |
743 |
744 |
745 |
746 |
747 |
748 |
749 |
750 |
751 |
752 |
753 |
754 |
755 |
756 |
757 |
758 |
759 |
760 |
761 |
762 |
763 |
764 |
765 |
766 |
767 |
768 |
769 |
770 |
771 |
772 |
773 |
774 |
775 |
776 |
777 |
778 |
779 |
780 |
781 |
782 |
783 |
784 |
785 |
786 |
787 |
788 |
791 |
792 |
793 |
794 |
795 |
796 |
797 |
798 |
799 |
800 |
801 |
802 |
803 |
804 |
805 |
806 |
807 |
808 |
809 |
810 |
811 |
812 |
813 |
814 |
815 |
816 |
817 |
818 |
819 |
820 |
821 |
822 |
823 |
824 |
825 |
826 |
827 |
828 |
829 |
830 |
831 |
832 |
833 | Must set JVM to use for profiling in profiler.info.jvm
834 | Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
835 |
836 |
839 |
840 |
841 |
842 |
843 |
844 |
845 |
846 |
847 |
848 |
849 |
850 |
851 |
852 |
853 |
854 |
855 |
856 |
857 |
858 |
859 |
860 |
861 |
862 |
863 |
864 |
865 |
866 |
867 |
868 |
869 |
870 |
871 |
872 |
873 |
874 |
875 |
876 |
877 |
878 |
879 |
880 |
881 |
882 |
883 |
884 |
885 |
886 |
887 |
888 |
889 |
890 |
891 |
892 |
893 |
894 |
895 |
896 |
897 |
898 |
899 |
900 |
901 |
902 |
903 |
904 |
905 |
906 |
907 |
908 |
909 |
910 |
911 |
912 |
913 |
914 |
915 |
916 |
917 |
918 |
919 |
920 |
921 |
922 |
923 |
924 |
925 |
926 |
927 |
928 |
929 |
930 |
931 |
932 |
933 |
934 |
935 |
936 |
937 |
938 |
939 |
940 |
941 |
942 |
943 |
944 |
945 |
946 |
947 |
948 |
949 |
950 |
951 |
952 |
953 |
954 |
955 |
956 |
957 |
958 |
959 |
960 |
961 |
962 |
963 |
964 |
965 |
966 |
967 |
968 |
969 |
970 |
971 |
972 |
973 |
974 |
975 |
976 |
977 |
978 |
979 |
980 |
981 |
982 |
983 |
984 |
985 |
986 |
987 |
988 |
989 |
990 |
991 |
992 |
993 |
994 |
995 |
996 |
997 |
998 |
999 |
1000 |
1001 |
1002 |
1003 |
1004 |
1005 |
1006 |
1007 |
1008 |
1009 |
1010 |
1011 |
1012 |
1013 |
1014 |
1015 |
1016 |
1017 |
1018 |
1019 |
1020 |
1021 |
1022 |
1023 |
1024 |
1025 |
1026 |
1027 |
1028 |
1029 |
1030 |
1031 |
1032 |
1033 |
1034 |
1035 |
1036 |
1037 |
1038 |
1039 |
1040 |
1041 |
1042 |
1043 |
1044 |
1045 |
1046 |
1047 |
1048 |
1049 |
1050 |
1055 |
1056 |
1057 |
1058 |
1059 |
1060 |
1061 |
1062 |
1063 |
1064 |
1065 |
1066 |
1067 |
1068 |
1069 |
1070 |
1071 |
1072 |
1073 |
1074 |
1075 |
1076 |
1077 |
1078 |
1079 |
1080 |
1081 |
1082 |
1083 |
1084 |
1085 |
1086 |
1087 |
1088 |
1089 |
1090 |
1091 |
1092 |
1093 |
1094 |
1095 |
1096 |
1097 |
1098 |
1099 |
1100 |
1101 |
1102 |
1103 |
1104 |
1105 |
1106 |
1107 |
1108 |
1109 |
1110 |
1111 |
1112 |
1113 |
1114 |
1115 |
1116 |
1117 | Must select some files in the IDE or set javac.includes
1118 |
1119 |
1120 |
1121 |
1122 |
1123 |
1124 |
1125 |
1126 |
1131 |
1132 |
1133 |
1134 |
1135 |
1136 |
1137 |
1138 |
1139 |
1140 |
1141 |
1142 |
1143 |
1144 |
1145 |
1146 |
1147 |
1148 |
1149 |
1150 |
1151 |
1152 |
1153 |
1154 |
1155 |
1156 |
1157 |
1158 |
1159 |
1160 |
1161 |
1162 |
1163 |
1164 |
1165 |
1166 |
1167 |
1168 |
1169 |
1170 |
1171 |
1172 |
1173 |
1174 |
1175 |
1176 |
1177 |
1178 |
1179 |
1180 |
1181 |
1182 |
1183 |
1184 |
1185 |
1186 |
1187 |
1188 |
1189 |
1190 |
1191 |
1192 |
1193 |
1194 |
1195 |
1196 |
1197 |
1198 |
1199 |
1200 | To run this application from the command line without Ant, try:
1201 |
1202 | java -jar "${dist.jar.resolved}"
1203 |
1204 |
1205 |
1206 |
1207 |
1208 |
1209 |
1210 |
1211 |
1212 |
1213 |
1214 |
1215 |
1216 |
1217 |
1218 |
1219 |
1220 |
1221 |
1222 |
1223 |
1224 |
1225 |
1226 |
1227 |
1228 |
1229 |
1230 |
1231 |
1232 |
1233 |
1234 |
1235 |
1236 |
1237 |
1238 |
1239 |
1240 |
1241 |
1242 |
1243 |
1244 |
1245 |
1246 |
1247 |
1248 |
1249 |
1250 |
1251 |
1252 |
1253 |
1254 |
1255 |
1256 |
1257 |
1258 |
1259 |
1264 |
1265 |
1266 |
1267 |
1268 |
1269 |
1270 |
1271 |
1272 |
1273 |
1274 |
1275 |
1276 |
1277 |
1278 |
1279 |
1280 |
1281 |
1282 |
1283 |
1284 |
1285 |
1286 |
1287 |
1288 |
1289 |
1290 |
1291 |
1292 |
1293 |
1294 |
1295 |
1296 |
1297 |
1298 |
1299 |
1300 |
1301 |
1302 |
1303 |
1304 |
1305 |
1306 |
1307 |
1308 |
1309 |
1310 |
1311 |
1312 |
1313 |
1314 |
1315 |
1316 |
1317 |
1318 |
1319 |
1320 |
1321 |
1322 |
1323 |
1324 |
1329 |
1330 |
1331 |
1332 |
1333 |
1334 |
1335 |
1336 |
1337 |
1338 |
1339 |
1340 | Must select one file in the IDE or set run.class
1341 |
1342 |
1343 |
1344 | Must select one file in the IDE or set run.class
1345 |
1346 |
1347 |
1352 |
1353 |
1354 |
1355 |
1356 |
1357 |
1358 |
1359 |
1360 |
1361 |
1362 |
1363 |
1364 |
1365 |
1366 |
1367 |
1368 |
1369 |
1370 |
1371 | Must select one file in the IDE or set debug.class
1372 |
1373 |
1374 |
1375 |
1376 | Must select one file in the IDE or set debug.class
1377 |
1378 |
1379 |
1380 |
1381 | Must set fix.includes
1382 |
1383 |
1384 |
1385 |
1386 |
1387 |
1388 |
1393 |
1396 |
1397 | This target only works when run from inside the NetBeans IDE.
1398 |
1399 |
1400 |
1401 |
1402 |
1403 |
1404 |
1405 |
1406 | Must select one file in the IDE or set profile.class
1407 | This target only works when run from inside the NetBeans IDE.
1408 |
1409 |
1410 |
1411 |
1412 |
1413 |
1414 |
1415 |
1416 | This target only works when run from inside the NetBeans IDE.
1417 |
1418 |
1419 |
1420 |
1421 |
1422 |
1423 |
1424 |
1425 |
1426 |
1427 |
1428 |
1429 | This target only works when run from inside the NetBeans IDE.
1430 |
1431 |
1432 |
1433 |
1434 |
1435 |
1436 |
1437 |
1438 |
1439 |
1440 |
1441 |
1442 |
1443 |
1444 |
1445 |
1446 |
1447 |
1450 |
1451 |
1452 |
1453 |
1454 |
1455 |
1456 |
1457 |
1458 |
1459 |
1460 |
1461 |
1462 |
1463 | Must select one file in the IDE or set run.class
1464 |
1465 |
1466 |
1467 |
1468 |
1469 | Must select some files in the IDE or set test.includes
1470 |
1471 |
1472 |
1473 |
1474 | Must select one file in the IDE or set run.class
1475 |
1476 |
1477 |
1478 |
1479 | Must select one file in the IDE or set applet.url
1480 |
1481 |
1482 |
1483 |
1488 |
1489 |
1490 |
1491 |
1492 |
1493 |
1494 |
1495 |
1496 |
1497 |
1498 |
1499 |
1500 |
1501 |
1502 |
1503 |
1504 |
1505 |
1506 |
1507 |
1508 |
1509 |
1510 |
1511 |
1512 |
1513 |
1514 |
1515 |
1516 |
1517 |
1518 |
1519 |
1520 |
1521 |
1522 |
1523 |
1524 |
1525 |
1526 |
1527 |
1528 |
1529 |
1530 |
1531 |
1532 |
1533 |
1534 |
1539 |
1540 |
1541 |
1542 |
1543 |
1544 |
1545 |
1546 |
1547 |
1548 |
1549 |
1550 |
1551 |
1552 |
1553 |
1554 |
1555 |
1556 |
1557 |
1558 |
1559 |
1560 |
1561 |
1562 |
1563 |
1564 |
1565 |
1566 |
1567 |
1568 |
1569 |
1570 |
1571 |
1572 |
1573 |
1574 |
1575 |
1576 |
1577 |
1578 |
1579 |
1580 |
1581 |
1582 |
1583 |
1584 |
1585 |
1586 |
1587 |
1588 |
1589 |
1590 |
1591 |
1592 |
1593 |
1594 |
1595 |
1596 |
1597 |
1598 |
1599 |
1600 |
1601 |
1602 |
1603 |
1604 |
1605 |
1606 |
1607 |
1608 |
1609 |
1610 |
1611 |
1612 |
1613 |
1614 |
1615 |
1616 |
1617 | Must select some files in the IDE or set javac.includes
1618 |
1619 |
1620 |
1621 |
1622 |
1623 |
1624 |
1625 |
1626 |
1627 |
1628 |
1629 |
1630 |
1631 |
1632 |
1633 |
1638 |
1639 |
1640 |
1641 |
1642 |
1643 |
1644 |
1645 | Some tests failed; see details above.
1646 |
1647 |
1648 |
1649 |
1650 |
1651 |
1652 |
1653 |
1654 | Must select some files in the IDE or set test.includes
1655 |
1656 |
1657 |
1658 | Some tests failed; see details above.
1659 |
1660 |
1661 |
1662 | Must select some files in the IDE or set test.class
1663 | Must select some method in the IDE or set test.method
1664 |
1665 |
1666 |
1667 | Some tests failed; see details above.
1668 |
1669 |
1670 |
1675 |
1676 | Must select one file in the IDE or set test.class
1677 |
1678 |
1679 |
1680 | Must select one file in the IDE or set test.class
1681 | Must select some method in the IDE or set test.method
1682 |
1683 |
1684 |
1685 |
1686 |
1687 |
1688 |
1689 |
1690 |
1691 |
1692 |
1693 |
1694 |
1699 |
1700 | Must select one file in the IDE or set applet.url
1701 |
1702 |
1703 |
1704 |
1705 |
1706 |
1707 |
1712 |
1713 | Must select one file in the IDE or set applet.url
1714 |
1715 |
1716 |
1717 |
1718 |
1719 |
1720 |
1721 |
1726 |
1727 |
1728 |
1729 |
1730 |
1731 |
1732 |
1733 |
1734 |
1735 |
1736 |
1737 |
1738 |
1739 |
1740 |
1741 |
1742 |
1743 |
1744 |
1745 |
1746 |
1747 |
1748 |
1749 |
1750 |
1751 |
1752 |
1753 |
1754 |
1755 |
1756 |
1757 |
1758 |
1759 |
1760 |
1761 |
1762 |
1763 |
1764 |
1765 |
1766 |
1767 |
1768 |
1769 |
1770 |
1771 |
1772 |
--------------------------------------------------------------------------------
/nbproject/genfiles.properties:
--------------------------------------------------------------------------------
1 | build.xml.data.CRC32=40fcb46f
2 | build.xml.script.CRC32=958daa81
3 | build.xml.stylesheet.CRC32=f85dc8f2@1.106.0.48
4 | # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
5 | # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
6 | nbproject/build-impl.xml.data.CRC32=40fcb46f
7 | nbproject/build-impl.xml.script.CRC32=94e862d4
8 | nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.106.0.48
9 |
--------------------------------------------------------------------------------
/nbproject/private/private.properties:
--------------------------------------------------------------------------------
1 | compile.on.save=true
2 | user.properties.file=C:\\Users\\RAVEN\\AppData\\Roaming\\NetBeans\\17\\build.properties
3 |
--------------------------------------------------------------------------------
/nbproject/private/private.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | file:/E:/Raven/git/java-swing-timepicker/test/testing/Main.java
7 | file:/E:/Raven/git/java-swing-timepicker/src/com/raven/swing/TimePicker.java
8 | file:/E:/Raven/git/java-swing-timepicker/src/com/raven/swing/TimeComponent.java
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/nbproject/project.properties:
--------------------------------------------------------------------------------
1 | annotation.processing.enabled=true
2 | annotation.processing.enabled.in.editor=false
3 | annotation.processing.processor.options=
4 | annotation.processing.processors.list=
5 | annotation.processing.run.all.processors=true
6 | annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
7 | build.classes.dir=${build.dir}/classes
8 | build.classes.excludes=**/*.java,**/*.form
9 | # This directory is removed when the project is cleaned:
10 | build.dir=build
11 | build.generated.dir=${build.dir}/generated
12 | build.generated.sources.dir=${build.dir}/generated-sources
13 | # Only compile against the classpath explicitly listed here:
14 | build.sysclasspath=ignore
15 | build.test.classes.dir=${build.dir}/test/classes
16 | build.test.results.dir=${build.dir}/test/results
17 | # Uncomment to specify the preferred debugger connection transport:
18 | #debug.transport=dt_socket
19 | debug.classpath=\
20 | ${run.classpath}
21 | debug.modulepath=\
22 | ${run.modulepath}
23 | debug.test.classpath=\
24 | ${run.test.classpath}
25 | debug.test.modulepath=\
26 | ${run.test.modulepath}
27 | # Files in build.classes.dir which should be excluded from distribution jar
28 | dist.archive.excludes=
29 | # This directory is removed when the project is cleaned:
30 | dist.dir=dist
31 | dist.jar=${dist.dir}/swing-time-picker.jar
32 | dist.javadoc.dir=${dist.dir}/javadoc
33 | dist.jlink.dir=${dist.dir}/jlink
34 | dist.jlink.output=${dist.jlink.dir}/swing-time-picker
35 | excludes=
36 | file.reference.TimingFramework-0.55.jar=TimingFramework-0.55.jar
37 | includes=**
38 | jar.compress=false
39 | javac.classpath=\
40 | ${file.reference.TimingFramework-0.55.jar}
41 | # Space-separated list of extra javac options
42 | javac.compilerargs=
43 | javac.deprecation=false
44 | javac.external.vm=true
45 | javac.modulepath=
46 | javac.processormodulepath=
47 | javac.processorpath=\
48 | ${javac.classpath}
49 | javac.source=1.8
50 | javac.target=1.8
51 | javac.test.classpath=\
52 | ${javac.classpath}:\
53 | ${build.classes.dir}
54 | javac.test.modulepath=\
55 | ${javac.modulepath}
56 | javac.test.processorpath=\
57 | ${javac.test.classpath}
58 | javadoc.additionalparam=
59 | javadoc.author=false
60 | javadoc.encoding=${source.encoding}
61 | javadoc.html5=false
62 | javadoc.noindex=false
63 | javadoc.nonavbar=false
64 | javadoc.notree=false
65 | javadoc.private=false
66 | javadoc.splitindex=true
67 | javadoc.use=true
68 | javadoc.version=false
69 | javadoc.windowtitle=
70 | # The jlink additional root modules to resolve
71 | jlink.additionalmodules=
72 | # The jlink additional command line parameters
73 | jlink.additionalparam=
74 | jlink.launcher=true
75 | jlink.launcher.name=swing-time-picker
76 | main.class=swing.time.picker.SwingTimePicker
77 | manifest.file=manifest.mf
78 | meta.inf.dir=${src.dir}/META-INF
79 | mkdist.disabled=false
80 | platform.active=default_platform
81 | run.classpath=\
82 | ${javac.classpath}:\
83 | ${build.classes.dir}
84 | # Space-separated list of JVM arguments used when running the project.
85 | # You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
86 | # To set system properties for unit tests define test-sys-prop.name=value:
87 | run.jvmargs=
88 | run.modulepath=\
89 | ${javac.modulepath}
90 | run.test.classpath=\
91 | ${javac.test.classpath}:\
92 | ${build.test.classes.dir}
93 | run.test.modulepath=\
94 | ${javac.test.modulepath}
95 | source.encoding=UTF-8
96 | src.dir=src
97 | test.src.dir=test
98 |
--------------------------------------------------------------------------------
/nbproject/project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | org.netbeans.modules.java.j2seproject
4 |
5 |
6 | swing-time-picker
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/com/raven/event/EventTimeChange.java:
--------------------------------------------------------------------------------
1 | package com.raven.event;
2 |
3 | public interface EventTimeChange {
4 |
5 | public void timeChange(boolean isHour);
6 | }
7 |
--------------------------------------------------------------------------------
/src/com/raven/event/EventTimePicker.java:
--------------------------------------------------------------------------------
1 | package com.raven.event;
2 |
3 | public interface EventTimePicker {
4 |
5 | public void timeSelected(String time);
6 | }
7 |
--------------------------------------------------------------------------------
/src/com/raven/event/EventTimeSelected.java:
--------------------------------------------------------------------------------
1 | package com.raven.event;
2 |
3 | public interface EventTimeSelected {
4 |
5 | public void hourSelected(int hour);
6 |
7 | public void minuteSelected(int minute);
8 | }
9 |
--------------------------------------------------------------------------------
/src/com/raven/swing/TimeComponent.java:
--------------------------------------------------------------------------------
1 | package com.raven.swing;
2 |
3 | import com.raven.event.EventTimeChange;
4 | import com.raven.event.EventTimeSelected;
5 | import java.awt.BasicStroke;
6 | import java.awt.Color;
7 | import java.awt.Dimension;
8 | import java.awt.FontMetrics;
9 | import java.awt.Graphics;
10 | import java.awt.Graphics2D;
11 | import java.awt.RenderingHints;
12 | import java.awt.Shape;
13 | import java.awt.event.MouseAdapter;
14 | import java.awt.event.MouseEvent;
15 | import java.awt.event.MouseMotionAdapter;
16 | import java.awt.geom.Arc2D;
17 | import java.awt.geom.Rectangle2D;
18 | import java.text.DecimalFormat;
19 | import java.util.ArrayList;
20 | import java.util.List;
21 | import javax.swing.JComponent;
22 | import javax.swing.SwingUtilities;
23 | import org.jdesktop.animation.timing.Animator;
24 | import org.jdesktop.animation.timing.TimingTarget;
25 | import org.jdesktop.animation.timing.TimingTargetAdapter;
26 |
27 | public class TimeComponent extends JComponent {
28 |
29 | public int getTime_minute() {
30 | return time_minute;
31 | }
32 |
33 | public void setTime_minute(int time_minute) {
34 | this.time_minute = time_minute;
35 | }
36 |
37 | public int getTime_hour() {
38 | return time_hour;
39 | }
40 |
41 | public void setTime_hour(int time_hour) {
42 | this.time_hour = time_hour;
43 | }
44 |
45 | public void setEventTimeChange(EventTimeChange eventTimeChange) {
46 | this.eventTimeChange = eventTimeChange;
47 | }
48 |
49 | public Color getColor() {
50 | return color;
51 | }
52 |
53 | public void setColor(Color color) {
54 | this.color = color;
55 | }
56 |
57 | private static final float RAD_PER_NUM = (float) (Math.PI / -6);
58 | private static final int OFFSET_24HOUR = 27;
59 | private Color color = new Color(237, 88, 207);
60 | private int time_minute = 0;
61 | private int time_hour = 0;
62 | private int currentSelected = 12;
63 | private int selectedHour = 12;
64 | private final Animator animator;
65 | private float hourAnimat = 12;
66 | private float betweenHour = 0;
67 | private int targetHour = 12;
68 | private float lastTarget;
69 | private boolean isHour = true;
70 | private List events;
71 | private EventTimeChange eventTimeChange;
72 | private boolean m_24hourclock = false;
73 |
74 | public TimeComponent() {
75 | events = new ArrayList<>();
76 | setBackground(Color.WHITE);
77 | setForeground(new Color(50, 50, 50));
78 | setPreferredSize(new Dimension(201, 201));
79 | setFont(new java.awt.Font("sansserif", 0, 14));
80 | addMouseListener(new MouseAdapter() {
81 | @Override
82 | public void mouseReleased(MouseEvent me) {
83 | if (SwingUtilities.isLeftMouseButton(me)) {
84 | if (isHour) {
85 | setTime_hour(getSelectedHour(me));
86 | if (getTime_hour() == -1) {
87 | setTime_hour(currentSelected);
88 | }
89 | runEvent(getTime_hour());
90 | changeToMinute();
91 | } else {
92 | checkMouseSelect(me);
93 | }
94 | }
95 | }
96 | });
97 |
98 | addMouseMotionListener(new MouseMotionAdapter() {
99 | @Override
100 | public void mouseDragged(MouseEvent me) {
101 | if (SwingUtilities.isLeftMouseButton(me)) {
102 | checkMouseSelectDragged(me);
103 | }
104 | }
105 | });
106 | TimingTarget target = new TimingTargetAdapter() {
107 | @Override
108 | public void timingEvent(float fraction) {
109 | hourAnimat = lastTarget + betweenHour * fraction;
110 | repaint();
111 | }
112 |
113 | @Override
114 | public void end() {
115 | selectedHour = targetHour;
116 | lastTarget = hourAnimat;
117 | if (isHour) {
118 | setTime_hour(selectedHour);
119 | } else {
120 | setTime_minute(selectedHour);
121 | }
122 | repaint();
123 | runEvent(selectedHour);
124 | }
125 | };
126 | animator = new Animator(200, target);
127 | animator.setResolution(0);
128 | }
129 |
130 | private void checkMouseSelect(MouseEvent me) {
131 | int width = getWidth();
132 | int height = getHeight();
133 | int size = Math.min(width, height);
134 | int x = (width - size) / 2;
135 | int y = (height - size) / 2;
136 | int space = isHour ? 30 : 6;
137 | int start = 90;
138 | int max = isHour ? 12 : 59;
139 | for (int i = isHour ? 1 : 0; i <= max; i++) {
140 | int add12hour = 0;
141 | if (isHour) {
142 | Shape s24 = new Arc2D.Double(x+OFFSET_24HOUR, y+OFFSET_24HOUR, size - 2*OFFSET_24HOUR, size-2*OFFSET_24HOUR, start - (space * i) - (space / 2), space, Arc2D.PIE);
143 | if (s24.contains(me.getPoint())) {
144 | add12hour=12;
145 | }
146 | }
147 |
148 | Shape s = new Arc2D.Double(x, y, size, size, start - (space * i) - (space / 2), space, Arc2D.PIE);
149 | if (s.contains(me.getPoint())) {
150 | i += add12hour;
151 | currentSelected = i;
152 | if (i != selectedHour) {
153 | targetHour = i;
154 | if (animator.isRunning()) {
155 | animator.stop();
156 | lastTarget = convertLastTarget(lastTarget);
157 | } else {
158 | lastTarget = selectedHour;
159 | }
160 | betweenHour = calulateHour(lastTarget, targetHour);
161 | animator.start();
162 | }
163 | break;
164 | }
165 | }
166 | }
167 |
168 | private void checkMouseSelectDragged(MouseEvent me) {
169 | int width = getWidth();
170 | int height = getHeight();
171 | int size = Math.min(width, height);
172 | int x = (width - size) / 2;
173 | int y = (height - size) / 2;
174 | int space = isHour ? 30 : 6;
175 | int start = 90;
176 | int max = isHour ? 12 : 59;
177 | for (int i = isHour ? 1 : 0; i <= max; i++) {
178 | int add12hour = 0;
179 | if (isHour) {
180 | Shape s24 = new Arc2D.Double(x+OFFSET_24HOUR, y+OFFSET_24HOUR, size - 2*OFFSET_24HOUR, size-2*OFFSET_24HOUR, start - (space * i) - (space / 2), space, Arc2D.PIE);
181 | if (s24.contains(me.getPoint())) {
182 | add12hour=12;
183 | }
184 | }
185 | Shape s = new Arc2D.Double(x, y, size, size, start - (space * i) - (space / 2), space, Arc2D.PIE);
186 | if (s.contains(me.getPoint())) {
187 | if (animator.isRunning()) {
188 | animator.stop();
189 | }
190 | i+= add12hour;
191 | currentSelected = i;
192 | if (i != selectedHour) {
193 | hourAnimat = i;
194 | selectedHour = i;
195 | if (isHour) {
196 | time_hour = i;
197 | } else {
198 | time_minute = i;
199 | }
200 | runEvent(selectedHour);
201 | repaint();
202 | }
203 | break;
204 | }
205 | }
206 | }
207 |
208 | private int getSelectedHour(MouseEvent me) {
209 | int width = getWidth();
210 | int height = getHeight();
211 | int size = Math.min(width, height);
212 | int x = (width - size)/ 2;
213 | int y = (height - size) / 2;
214 | int space = isHour ? 30 : 6;
215 | int start = 90;
216 | int max = isHour ? 12 : 59;
217 |
218 | for (int i = isHour ? 1 : 0; i <= max; i++) {
219 | int add12hour = 0;
220 | if (isHour) {
221 | Shape s24 = new Arc2D.Double(x+OFFSET_24HOUR, y+OFFSET_24HOUR, size - 2*OFFSET_24HOUR, size-2*OFFSET_24HOUR, start - (space * i) - (space / 2), space, Arc2D.PIE);
222 |
223 | if (s24.contains(me.getPoint())) {
224 | add12hour=12;
225 | }
226 | }
227 |
228 | Shape s = new Arc2D.Double(x, y, size, size, start - (space * i) - (space / 2), space, Arc2D.PIE);
229 |
230 | if (s.contains(me.getPoint())) {
231 | return i + add12hour == 24 ? 0 : i+add12hour;
232 | }
233 | }
234 | return -1;
235 | }
236 |
237 | private float calulateHour(float currentHour, int targetHour) {
238 | float t = targetHour - currentHour;
239 | if (t > (isHour ? 6 : 30)) {
240 | t = -((isHour ? 12 : 60) - t);
241 | } else if (t <= -(isHour ? 6 : 30)) {
242 | t += (isHour ? 12 : 60);
243 | }
244 | return t;
245 | }
246 |
247 |
248 | @Override
249 | protected void paintComponent(Graphics grphcs) {
250 | int width = getWidth();
251 | int height = getHeight();
252 | int size = Math.min(width, height);
253 | int x = (width - size) / 2;
254 | int y = (height - size) / 2;
255 | Graphics2D g2 = (Graphics2D) grphcs;
256 | g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
257 | g2.setColor(getBackground());
258 | g2.fillOval(x, y, size, size);
259 | int centerX = width / 2;
260 | int centerY = height / 2;
261 | int centerSize = 7;
262 | g2.setColor(color);
263 | g2.fillOval(centerX - centerSize / 2, centerY - centerSize / 2, centerSize, centerSize);
264 | drawLineHour(g2, hourAnimat);
265 | createNumber(g2);
266 |
267 | g2.dispose();
268 | super.paintComponent(grphcs);
269 | }
270 |
271 | private void createNumber(Graphics2D g2) {
272 | DecimalFormat df = new DecimalFormat("00");
273 | int width = getWidth();
274 | int height = getHeight();
275 | int size = Math.min(width, height);
276 | int centerX = width / 2;
277 | int centerY = height / 2;
278 | for (int i = 12; i >= 1; i--) {
279 | String number;
280 | if (isHour) {
281 | number = i + "";
282 | } else {
283 | number = df.format(i == 12 ? 0 : (i * 5));
284 | }
285 | Dimension stringSize = getStringSize(g2, number);
286 | float angle = RAD_PER_NUM * i;
287 | float sine = (float) Math.sin(angle);
288 | float cosine = (float) Math.cos(angle);
289 | int dx = (int) ((size / 2 - 13) * -sine);
290 | int dy = (int) ((size / 2 - 13) * -cosine);
291 | if (convertLastTargetToHour(hourAnimat) == i * (isHour ? 1 : 5)) {
292 | g2.setColor(Color.WHITE);
293 | } else {
294 | g2.setColor(getForeground());
295 | }
296 | g2.drawString(number, dx + centerX - (stringSize.width / 2), dy + centerY + 5);
297 | if (isHour && m_24hourclock) {
298 | number = df.format(i == 12 ? 0 : i+12);
299 | stringSize = getStringSize(g2, number);
300 | if (convertLastTargetToHour(hourAnimat) == (i == 12 ? 0 : i+12) ) {
301 | g2.setColor(Color.WHITE);
302 | } else {
303 | g2.setColor(getForeground());
304 | }
305 | int dx2 = (int) ((size / 2 - 13 - OFFSET_24HOUR) * -sine);
306 | int dy2 = (int) ((size / 2 - 13 - OFFSET_24HOUR) * -cosine);
307 |
308 | g2.drawString(number, dx2 + centerX - (stringSize.width / 2), dy2 + centerY + 5);
309 | }
310 | }
311 | }
312 |
313 | private void drawLineHour(Graphics2D g2, float hour) {
314 | int width = getWidth();
315 | int height = getHeight();
316 | int centerX = width / 2;
317 | int centerY = height / 2;
318 | int size = Math.min(width, height) / 2 - 13;
319 | double rhours = (hour * (isHour ? 30 : 6)) * (Math.PI) / 180;
320 | // we have a 24 hour clock we need to modify some values
321 | if (isHour && m_24hourclock) {
322 | hour = getSelectedHour();
323 | if (hour > 12 || hour == 0) {
324 | size -= OFFSET_24HOUR;
325 | if (hour > 12)
326 | rhours = ((hour-12) * 30) * (Math.PI) / 180;
327 | else // hour == 0;
328 | rhours = 0;
329 | }
330 | }
331 | int toX = centerX + (int) (size * Math.cos(rhours - (Math.PI / 2)));
332 | int toY = centerY + (int) (size * Math.sin(rhours - (Math.PI / 2)));
333 | g2.setStroke(new BasicStroke(2f));
334 | g2.drawLine(centerX, centerY, toX, toY);
335 | int ovalSize = 23;
336 | g2.fillOval(toX - (ovalSize / 2), toY - (ovalSize / 2), ovalSize, ovalSize);
337 | }
338 |
339 | private Dimension getStringSize(Graphics2D g2, String text) {
340 | FontMetrics ft = g2.getFontMetrics();
341 | Rectangle2D r2 = ft.getStringBounds(text, g2);
342 | return new Dimension((int) r2.getWidth(), (int) r2.getHeight());
343 | }
344 |
345 | private int convertLastTargetToHour(float lastTarget) {
346 | int value = isHour ? (m_24hourclock ? 24 : 12) : 60;
347 | if (lastTarget <= 0) {
348 | lastTarget += value;
349 | } else if (lastTarget > value) {
350 | lastTarget -= value;
351 | }
352 | if (isHour && m_24hourclock)
353 | return getSelectedHour();
354 | else
355 | return Math.round(lastTarget);
356 | }
357 |
358 | private float convertLastTarget(float lastTarget) {
359 | int value = isHour ? (m_24hourclock ? 24 : 12) : 60;
360 | if (lastTarget <= 0) {
361 | lastTarget += value;
362 | } else if (lastTarget > value) {
363 | lastTarget -= value;
364 | }
365 | return lastTarget;
366 | }
367 |
368 | private int convertHourToTargetMinute(int hour) {
369 |
370 | if ((!m_24hourclock && hour == 12) || (m_24hourclock && hour == 24)) {
371 | return 0;
372 | } else {
373 | return (hour % 12) * 5;
374 | }
375 | }
376 |
377 | private int convertMinuteToTargetHour(int minute) {
378 | if (minute == 0) {
379 | return 12;
380 | } else {
381 | return minute / 5;
382 | }
383 | }
384 |
385 | public void set24hour(boolean clock24hour) {
386 | m_24hourclock = clock24hour;
387 | }
388 |
389 | public int getSelectedHour() {
390 | return selectedHour;
391 | }
392 |
393 | public void setSelectedHour(int time_hour, int time_minute) {
394 | this.time_hour = time_hour;
395 | this.time_minute = time_minute;
396 | currentSelected = isHour ? time_hour : time_minute;
397 | if (currentSelected != selectedHour) {
398 | targetHour = currentSelected;
399 | if (animator.isRunning()) {
400 | animator.stop();
401 | lastTarget = convertLastTarget(lastTarget);
402 | } else {
403 | lastTarget = selectedHour;
404 | }
405 | betweenHour = calulateHour(lastTarget, targetHour);
406 | animator.start();
407 | }
408 | }
409 |
410 | public void addEventTimeSelected(EventTimeSelected evnet) {
411 | this.events.add(evnet);
412 | }
413 |
414 | public void runEvent(int hour) {
415 | for (EventTimeSelected event : events) {
416 | if (isHour) {
417 | event.hourSelected(hour);
418 | } else {
419 | event.minuteSelected(hour);
420 | }
421 | }
422 | }
423 |
424 | public void changeToMinute() {
425 | if (isHour) {
426 | eventTimeChange.timeChange(false);
427 | isHour = false;
428 | targetHour = time_minute;
429 | selectedHour = convertHourToTargetMinute(selectedHour);
430 | if (animator.isRunning()) {
431 | animator.stop();
432 | lastTarget = convertLastTarget(lastTarget);
433 | } else {
434 | lastTarget = selectedHour;
435 | }
436 | betweenHour = calulateHour(lastTarget, targetHour);
437 | animator.start();
438 | }
439 | }
440 |
441 | public void changeToHour() {
442 | if (!isHour) {
443 | eventTimeChange.timeChange(true);
444 | isHour = true;
445 | targetHour = time_hour;
446 | selectedHour = convertMinuteToTargetHour(selectedHour);
447 | if (animator.isRunning()) {
448 | animator.stop();
449 | lastTarget = convertLastTarget(lastTarget);
450 | } else {
451 | lastTarget = selectedHour;
452 | }
453 | betweenHour = calulateHour(lastTarget, targetHour);
454 | animator.start();
455 | }
456 | }
457 | }
458 |
--------------------------------------------------------------------------------
/src/com/raven/swing/TimePicker.form:
--------------------------------------------------------------------------------
1 |
2 |
3 |
309 |
--------------------------------------------------------------------------------
/src/com/raven/swing/TimePicker.java:
--------------------------------------------------------------------------------
1 | package com.raven.swing;
2 |
3 | import com.raven.event.EventTimeChange;
4 | import com.raven.event.EventTimePicker;
5 | import com.raven.event.EventTimeSelected;
6 | import java.awt.Color;
7 | import java.awt.Component;
8 | import java.awt.event.ActionListener;
9 | import java.text.DecimalFormat;
10 | import java.text.SimpleDateFormat;
11 | import java.util.ArrayList;
12 | import java.util.Calendar;
13 | import java.util.Date;
14 | import java.util.List;
15 | import javax.swing.JPopupMenu;
16 | import javax.swing.JTextField;
17 | import javax.swing.SwingUtilities;
18 | import javax.swing.border.EmptyBorder;
19 |
20 | public class TimePicker extends javax.swing.JPanel {
21 |
22 | private final SimpleDateFormat formatampm = new SimpleDateFormat("hh:mm aa");
23 | private final SimpleDateFormat format24h = new SimpleDateFormat("HH:mm");
24 | private final DecimalFormat numberFormat = new DecimalFormat("00");
25 | private JTextField displayText;
26 | private List events;
27 | private JPopupMenu menu;
28 | private SimpleDateFormat format = formatampm;
29 |
30 | public TimePicker() {
31 | initComponents();
32 | init();
33 | }
34 |
35 | private void init() {
36 | events = new ArrayList<>();
37 | now();
38 | panel.setVisible(!jCB24hour.isSelected());
39 | EventTimeSelected event = new EventTimeSelected() {
40 | @Override
41 | public void hourSelected(int hour) {
42 | cmdHour.setText(numberFormat.format(hour));
43 | displayOnText();
44 | runEvent();
45 | }
46 |
47 | @Override
48 | public void minuteSelected(int minute) {
49 | cmdMinute.setText(numberFormat.format(minute));
50 | displayOnText();
51 | runEvent();
52 | }
53 | };
54 | timeComponent.addEventTimeSelected(event);
55 | timeComponent.setEventTimeChange(new EventTimeChange() {
56 | @Override
57 | public void timeChange(boolean isHour) {
58 | if (isHour) {
59 | cmdHour.setForeground(Color.WHITE);
60 | cmdMinute.setForeground(new Color(178, 178, 178));
61 | } else {
62 | cmdMinute.setForeground(Color.WHITE);
63 | cmdHour.setForeground(new Color(178, 178, 178));
64 | }
65 | displayOnText();
66 | runEvent();
67 | }
68 | });
69 | setForeground(new Color(37, 88, 207));
70 | }
71 |
72 | private void changeAM(boolean am) {
73 | if (am) {
74 | cmdAM.setForeground(Color.WHITE);
75 | cmdPM.setForeground(new Color(178, 178, 178));
76 | } else {
77 | cmdPM.setForeground(Color.WHITE);
78 | cmdAM.setForeground(new Color(178, 178, 178));
79 | }
80 | displayOnText();
81 | runEvent();
82 | }
83 |
84 | private void displayOnText() {
85 | if (displayText != null) {
86 | if (jCB24hour.isSelected()) {
87 | displayText.setText(cmdHour.getText() + ":" + cmdMinute.getText());
88 | } else {
89 | displayText.setText(cmdHour.getText() + ":" + cmdMinute.getText() + " " + (cmdAM.getForeground() == Color.WHITE ? "AM" : "PM"));
90 | }
91 | }
92 | }
93 |
94 | @SuppressWarnings("unchecked")
95 | // //GEN-BEGIN:initComponents
96 | private void initComponents() {
97 |
98 | header = new javax.swing.JPanel();
99 | panelHeader = new javax.swing.JPanel();
100 | lbSplit = new com.raven.swing.TimePickerLabel();
101 | panel = new javax.swing.JPanel();
102 | cmdAM = new com.raven.swing.TimePickerButton();
103 | cmdPM = new com.raven.swing.TimePickerButton();
104 | cmdHour = new com.raven.swing.TimePickerButton();
105 | cmdMinute = new com.raven.swing.TimePickerButton();
106 | cmdOK = new com.raven.swing.TimePickerButton();
107 | cmdCancel = new com.raven.swing.TimePickerButton();
108 | jCB24hour = new javax.swing.JCheckBox();
109 | bg = new javax.swing.JPanel();
110 | timeComponent = new com.raven.swing.TimeComponent();
111 |
112 | setBackground(new java.awt.Color(255, 255, 255));
113 |
114 | header.setBackground(new java.awt.Color(37, 88, 207));
115 | header.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
116 | public void mouseDragged(java.awt.event.MouseEvent evt) {
117 | headerMouseDragged(evt);
118 | }
119 | });
120 | header.addMouseListener(new java.awt.event.MouseAdapter() {
121 | public void mousePressed(java.awt.event.MouseEvent evt) {
122 | headerMousePressed(evt);
123 | }
124 | });
125 |
126 | panelHeader.setOpaque(false);
127 |
128 | lbSplit.setForeground(new java.awt.Color(178, 178, 178));
129 | lbSplit.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
130 | lbSplit.setText(":");
131 | lbSplit.setFont(new java.awt.Font("sansserif", 0, 48)); // NOI18N
132 |
133 | panel.setOpaque(false);
134 |
135 | cmdAM.setBackground(new java.awt.Color(37, 88, 207));
136 | cmdAM.setBorder(null);
137 | cmdAM.setForeground(new java.awt.Color(255, 255, 255));
138 | cmdAM.setText("AM");
139 | cmdAM.setFont(new java.awt.Font("sansserif", 1, 15)); // NOI18N
140 | cmdAM.addActionListener(new java.awt.event.ActionListener() {
141 | public void actionPerformed(java.awt.event.ActionEvent evt) {
142 | cmdAMActionPerformed(evt);
143 | }
144 | });
145 |
146 | cmdPM.setBackground(new java.awt.Color(37, 88, 207));
147 | cmdPM.setBorder(null);
148 | cmdPM.setForeground(new java.awt.Color(255, 255, 255));
149 | cmdPM.setText("PM");
150 | cmdPM.setFont(new java.awt.Font("sansserif", 1, 15)); // NOI18N
151 | cmdPM.addActionListener(new java.awt.event.ActionListener() {
152 | public void actionPerformed(java.awt.event.ActionEvent evt) {
153 | cmdPMActionPerformed(evt);
154 | }
155 | });
156 |
157 | javax.swing.GroupLayout panelLayout = new javax.swing.GroupLayout(panel);
158 | panel.setLayout(panelLayout);
159 | panelLayout.setHorizontalGroup(
160 | panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
161 | .addComponent(cmdPM, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
162 | .addComponent(cmdAM, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
163 | );
164 | panelLayout.setVerticalGroup(
165 | panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
166 | .addGroup(panelLayout.createSequentialGroup()
167 | .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
168 | .addComponent(cmdAM, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
169 | .addGap(3, 3, 3)
170 | .addComponent(cmdPM, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
171 | .addGap(8, 8, 8))
172 | );
173 |
174 | cmdHour.setBackground(new java.awt.Color(37, 88, 207));
175 | cmdHour.setForeground(new java.awt.Color(255, 255, 255));
176 | cmdHour.setText("07");
177 | cmdHour.setFont(new java.awt.Font("sansserif", 0, 48)); // NOI18N
178 | cmdHour.addActionListener(new java.awt.event.ActionListener() {
179 | public void actionPerformed(java.awt.event.ActionEvent evt) {
180 | cmdHourActionPerformed(evt);
181 | }
182 | });
183 |
184 | cmdMinute.setBackground(new java.awt.Color(37, 88, 207));
185 | cmdMinute.setForeground(new java.awt.Color(178, 178, 178));
186 | cmdMinute.setText("30");
187 | cmdMinute.setFont(new java.awt.Font("sansserif", 0, 48)); // NOI18N
188 | cmdMinute.addActionListener(new java.awt.event.ActionListener() {
189 | public void actionPerformed(java.awt.event.ActionEvent evt) {
190 | cmdMinuteActionPerformed(evt);
191 | }
192 | });
193 |
194 | javax.swing.GroupLayout panelHeaderLayout = new javax.swing.GroupLayout(panelHeader);
195 | panelHeader.setLayout(panelHeaderLayout);
196 | panelHeaderLayout.setHorizontalGroup(
197 | panelHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
198 | .addGroup(panelHeaderLayout.createSequentialGroup()
199 | .addContainerGap()
200 | .addComponent(cmdHour, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
201 | .addGap(3, 3, 3)
202 | .addComponent(lbSplit, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
203 | .addGap(3, 3, 3)
204 | .addComponent(cmdMinute, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
205 | .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
206 | .addComponent(panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
207 | .addContainerGap())
208 | );
209 | panelHeaderLayout.setVerticalGroup(
210 | panelHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
211 | .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelHeaderLayout.createSequentialGroup()
212 | .addContainerGap(9, Short.MAX_VALUE)
213 | .addGroup(panelHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
214 | .addComponent(cmdMinute, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
215 | .addComponent(lbSplit, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
216 | .addComponent(cmdHour, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
217 | .addComponent(panel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
218 | .addContainerGap())
219 | );
220 |
221 | javax.swing.GroupLayout headerLayout = new javax.swing.GroupLayout(header);
222 | header.setLayout(headerLayout);
223 | headerLayout.setHorizontalGroup(
224 | headerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
225 | .addGroup(headerLayout.createSequentialGroup()
226 | .addContainerGap(35, Short.MAX_VALUE)
227 | .addComponent(panelHeader, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
228 | .addContainerGap(35, Short.MAX_VALUE))
229 | );
230 | headerLayout.setVerticalGroup(
231 | headerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
232 | .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, headerLayout.createSequentialGroup()
233 | .addGap(0, 0, Short.MAX_VALUE)
234 | .addComponent(panelHeader, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
235 | );
236 |
237 | cmdOK.setForeground(new java.awt.Color(37, 88, 207));
238 | cmdOK.setText("OK");
239 | cmdOK.setFont(new java.awt.Font("sansserif", 1, 12)); // NOI18N
240 | cmdOK.addActionListener(new java.awt.event.ActionListener() {
241 | public void actionPerformed(java.awt.event.ActionEvent evt) {
242 | cmdOKActionPerformed(evt);
243 | }
244 | });
245 |
246 | cmdCancel.setForeground(new java.awt.Color(37, 88, 207));
247 | cmdCancel.setText("Cancel");
248 | cmdCancel.setFont(new java.awt.Font("sansserif", 1, 12)); // NOI18N
249 | cmdCancel.addActionListener(new java.awt.event.ActionListener() {
250 | public void actionPerformed(java.awt.event.ActionEvent evt) {
251 | cmdCancelActionPerformed(evt);
252 | }
253 | });
254 |
255 | jCB24hour.setText("24hour");
256 | jCB24hour.addActionListener(new java.awt.event.ActionListener() {
257 | public void actionPerformed(java.awt.event.ActionEvent evt) {
258 | jCB24hourActionPerformed(evt);
259 | }
260 | });
261 |
262 | bg.setOpaque(false);
263 |
264 | timeComponent.setBackground(new java.awt.Color(242, 242, 242));
265 |
266 | javax.swing.GroupLayout bgLayout = new javax.swing.GroupLayout(bg);
267 | bg.setLayout(bgLayout);
268 | bgLayout.setHorizontalGroup(
269 | bgLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
270 | .addComponent(timeComponent, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
271 | );
272 | bgLayout.setVerticalGroup(
273 | bgLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
274 | .addComponent(timeComponent, javax.swing.GroupLayout.DEFAULT_SIZE, 193, Short.MAX_VALUE)
275 | );
276 |
277 | javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
278 | this.setLayout(layout);
279 | layout.setHorizontalGroup(
280 | layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
281 | .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
282 | .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
283 | .addContainerGap()
284 | .addComponent(jCB24hour)
285 | .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
286 | .addComponent(cmdCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
287 | .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
288 | .addComponent(cmdOK, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
289 | .addContainerGap())
290 | .addComponent(bg, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
291 | );
292 | layout.setVerticalGroup(
293 | layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
294 | .addGroup(layout.createSequentialGroup()
295 | .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
296 | .addGap(15, 15, 15)
297 | .addComponent(bg, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
298 | .addGap(13, 13, 13)
299 | .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
300 | .addComponent(cmdOK, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
301 | .addComponent(cmdCancel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
302 | .addComponent(jCB24hour))
303 | .addGap(10, 10, 10))
304 | );
305 | }// //GEN-END:initComponents
306 |
307 | private void cmdHourActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdHourActionPerformed
308 | timeComponent.changeToHour();
309 | }//GEN-LAST:event_cmdHourActionPerformed
310 |
311 | private void cmdMinuteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdMinuteActionPerformed
312 | timeComponent.changeToMinute();
313 | }//GEN-LAST:event_cmdMinuteActionPerformed
314 |
315 | private void cmdAMActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdAMActionPerformed
316 | changeAM(true);
317 | }//GEN-LAST:event_cmdAMActionPerformed
318 |
319 | private void cmdPMActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdPMActionPerformed
320 | changeAM(false);
321 | }//GEN-LAST:event_cmdPMActionPerformed
322 |
323 | private void cmdCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdCancelActionPerformed
324 | if (menu != null) {
325 | menu.setVisible(false);
326 | }
327 | }//GEN-LAST:event_cmdCancelActionPerformed
328 |
329 | private void cmdOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdOKActionPerformed
330 | if (menu != null) {
331 | menu.setVisible(false);
332 | }
333 | }//GEN-LAST:event_cmdOKActionPerformed
334 | private int x;
335 | private int y;
336 | private void headerMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_headerMousePressed
337 | x = evt.getX();
338 | y = evt.getY() + 6;
339 | }//GEN-LAST:event_headerMousePressed
340 |
341 | private void headerMouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_headerMouseDragged
342 | if (menu != null && menu.isVisible()) {
343 | if (SwingUtilities.isLeftMouseButton(evt)) {
344 | int xs = evt.getXOnScreen();
345 | int ys = evt.getYOnScreen();
346 | menu.setLocation(xs - x, ys - y);
347 |
348 | }
349 | }
350 | }//GEN-LAST:event_headerMouseDragged
351 |
352 | private void jCB24hourActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCB24hourActionPerformed
353 | panel.setVisible(!jCB24hour.isSelected());
354 | timeComponent.set24hour(jCB24hour.isSelected());
355 | timeComponent.repaint();
356 | checkBorder(jCB24hour.isSelected());
357 | }//GEN-LAST:event_jCB24hourActionPerformed
358 |
359 | @Override
360 | public void setForeground(Color color) {
361 | super.setForeground(color);
362 | if (header != null) {
363 | header.setBackground(color);
364 | timeComponent.setColor(color);
365 | cmdCancel.setForeground(color);
366 | cmdOK.setForeground(color);
367 | cmdHour.setBackground(color);
368 | cmdMinute.setBackground(color);
369 | cmdAM.setBackground(color);
370 | cmdPM.setBackground(color);
371 | if (menu != null) {
372 | menu.setBackground(color);
373 | }
374 | }
375 | }
376 |
377 | public JTextField getDisplayText() {
378 | return displayText;
379 | }
380 |
381 | public void setDisplayText(JTextField displayText) {
382 | this.displayText = displayText;
383 | }
384 |
385 | public void setSelectedTime(Date date) {
386 | String now = format.format(date);
387 | int hour = Integer.valueOf(now.split(":")[0]);
388 | int minute = Integer.valueOf(now.split(":")[1].split(" ")[0]);
389 | if (format.equals(formatampm)) {
390 | changeAM(now.split(" ")[1].equals("AM"));
391 | }
392 | cmdHour.setText(numberFormat.format(hour));
393 | cmdMinute.setText(numberFormat.format(minute));
394 | timeComponent.setSelectedHour(hour, minute);
395 | }
396 |
397 | public void now() {
398 | setSelectedTime(new Date());
399 | }
400 |
401 | public String getSelectedTime() {
402 | return cmdHour.getText() + ":" + cmdMinute.getText() + " " + (cmdAM.getForeground() == Color.WHITE ? "AM" : "PM");
403 | }
404 |
405 | public Date getSelectedDate() {
406 | Calendar c = Calendar.getInstance();
407 |
408 | c.set(Calendar.HOUR_OF_DAY, Integer.valueOf(cmdHour.getText()));
409 | c.set(Calendar.MINUTE, Integer.valueOf(cmdMinute.getText()));
410 |
411 | return c.getTime();
412 | }
413 |
414 | private void runEvent() {
415 | for (EventTimePicker event : events) {
416 | event.timeSelected(getSelectedTime());
417 | }
418 | }
419 |
420 | public void addEventTimePicker(EventTimePicker event) {
421 | events.add(event);
422 | }
423 |
424 | public void addActionListener(ActionListener event) {
425 | cmdOK.addActionListener(event);
426 | }
427 |
428 | public void set24hourMode(boolean value) {
429 | jCB24hour.setVisible(false);
430 | jCB24hour.setSelected(value);
431 | format = (value ? format24h : formatampm);
432 | panel.setVisible(!value);
433 | timeComponent.set24hour(value);
434 | checkBorder(value);
435 | timeComponent.repaint();
436 | }
437 |
438 | private void checkBorder(boolean value) {
439 | if (value) {
440 | bg.setBorder(new EmptyBorder(0, 10, 0, 10));
441 | } else {
442 | bg.setBorder(new EmptyBorder(0, 0, 0, 0));
443 | }
444 | }
445 |
446 | public void showPopup(Component com, int x, int y) {
447 | if (menu == null) {
448 | menu = new TimePickerMenu();
449 | menu.setBackground(getForeground());
450 | menu.add(this);
451 | }
452 | menu.show(com, x, y);
453 | }
454 |
455 | // Variables declaration - do not modify//GEN-BEGIN:variables
456 | private javax.swing.JPanel bg;
457 | private com.raven.swing.TimePickerButton cmdAM;
458 | private com.raven.swing.TimePickerButton cmdCancel;
459 | private com.raven.swing.TimePickerButton cmdHour;
460 | private com.raven.swing.TimePickerButton cmdMinute;
461 | private com.raven.swing.TimePickerButton cmdOK;
462 | private com.raven.swing.TimePickerButton cmdPM;
463 | private javax.swing.JPanel header;
464 | private javax.swing.JCheckBox jCB24hour;
465 | private com.raven.swing.TimePickerLabel lbSplit;
466 | private javax.swing.JPanel panel;
467 | private javax.swing.JPanel panelHeader;
468 | private com.raven.swing.TimeComponent timeComponent;
469 | // End of variables declaration//GEN-END:variables
470 | }
471 |
--------------------------------------------------------------------------------
/src/com/raven/swing/TimePickerButton.java:
--------------------------------------------------------------------------------
1 | package com.raven.swing;
2 |
3 | import java.awt.AlphaComposite;
4 | import java.awt.Color;
5 | import java.awt.Cursor;
6 | import java.awt.Graphics;
7 | import java.awt.Graphics2D;
8 | import java.awt.Point;
9 | import java.awt.RenderingHints;
10 | import java.awt.event.MouseAdapter;
11 | import java.awt.event.MouseEvent;
12 | import java.awt.image.BufferedImage;
13 | import javax.swing.JButton;
14 | import javax.swing.border.EmptyBorder;
15 | import org.jdesktop.animation.timing.Animator;
16 | import org.jdesktop.animation.timing.TimingTarget;
17 | import org.jdesktop.animation.timing.TimingTargetAdapter;
18 |
19 | public class TimePickerButton extends JButton {
20 |
21 | public Color getEffectColor() {
22 | return effectColor;
23 | }
24 |
25 | public void setEffectColor(Color effectColor) {
26 | this.effectColor = effectColor;
27 | }
28 |
29 | private Animator animator;
30 | private int targetSize;
31 | private float animatSize;
32 | private Point pressedPoint;
33 | private float alpha;
34 | private Color effectColor = new Color(173, 173, 173);
35 |
36 | public TimePickerButton() {
37 | setContentAreaFilled(false);
38 | setBorder(new EmptyBorder(5, 0, 5, 0));
39 | setBackground(Color.WHITE);
40 | setCursor(new Cursor(Cursor.HAND_CURSOR));
41 | addMouseListener(new MouseAdapter() {
42 | @Override
43 | public void mousePressed(MouseEvent me) {
44 | targetSize = Math.max(getWidth(), getHeight()) * 2;
45 | animatSize = 0;
46 | pressedPoint = me.getPoint();
47 | alpha = 0.5f;
48 | if (animator.isRunning()) {
49 | animator.stop();
50 | }
51 | animator.start();
52 | }
53 | });
54 | TimingTarget target = new TimingTargetAdapter() {
55 | @Override
56 | public void timingEvent(float fraction) {
57 | if (fraction > 0.5f) {
58 | alpha = 1 - fraction;
59 | }
60 | animatSize = fraction * targetSize;
61 | repaint();
62 | }
63 | };
64 | animator = new Animator(400, target);
65 | animator.setResolution(0);
66 | }
67 |
68 | @Override
69 | protected void paintComponent(Graphics grphcs) {
70 | int width = getWidth();
71 | int height = getHeight();
72 | BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
73 | Graphics2D g2 = img.createGraphics();
74 | g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
75 | g2.setColor(getBackground());
76 | g2.fillRoundRect(0, 0, width, height, 5, 5);
77 | if (pressedPoint != null) {
78 | g2.setColor(effectColor);
79 | g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
80 | g2.fillOval((int) (pressedPoint.x - animatSize / 2), (int) (pressedPoint.y - animatSize / 2), (int) animatSize, (int) animatSize);
81 | }
82 | g2.dispose();
83 | grphcs.drawImage(img, 0, 0, null);
84 | super.paintComponent(grphcs);
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/src/com/raven/swing/TimePickerLabel.java:
--------------------------------------------------------------------------------
1 | package com.raven.swing;
2 |
3 | import javax.swing.JLabel;
4 | import javax.swing.border.EmptyBorder;
5 |
6 | public class TimePickerLabel extends JLabel {
7 |
8 | public TimePickerLabel() {
9 | setBorder(new EmptyBorder(5, 0, 5, 0));
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/com/raven/swing/TimePickerMenu.java:
--------------------------------------------------------------------------------
1 | package com.raven.swing;
2 |
3 | import java.awt.Color;
4 | import java.awt.Graphics;
5 | import javax.swing.JPopupMenu;
6 |
7 | public class TimePickerMenu extends JPopupMenu {
8 |
9 | @Override
10 | protected void paintComponent(Graphics grphcs) {
11 | grphcs.setColor(getBackground());
12 | grphcs.fillRect(0, 0, getWidth(), 81);
13 | grphcs.setColor(Color.WHITE);
14 | grphcs.fillRect(0, 81, getWidth(), getHeight());
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/test/testing/Main.form:
--------------------------------------------------------------------------------
1 |
2 |
3 |
73 |
--------------------------------------------------------------------------------
/test/testing/Main.java:
--------------------------------------------------------------------------------
1 | /*
2 | * To change this license header, choose License Headers in Project Properties.
3 | * To change this template file, choose Tools | Templates
4 | * and open the template in the editor.
5 | */
6 | package testing;
7 |
8 | import java.awt.Color;
9 |
10 | /**
11 | *
12 | * @author RAVEN
13 | */
14 | public class Main extends javax.swing.JFrame {
15 |
16 | /**
17 | * Creates new form Main
18 | */
19 | public Main() {
20 | initComponents();
21 | getContentPane().setBackground(new Color(240, 240, 240));
22 | }
23 |
24 | /**
25 | * This method is called from within the constructor to initialize the form.
26 | * WARNING: Do NOT modify this code. The content of this method is always
27 | * regenerated by the Form Editor.
28 | */
29 | @SuppressWarnings("unchecked")
30 | // //GEN-BEGIN:initComponents
31 | private void initComponents() {
32 |
33 | timePicker1 = new com.raven.swing.TimePicker();
34 | jButton1 = new javax.swing.JButton();
35 | txtTime = new javax.swing.JTextField();
36 |
37 | timePicker1.setForeground(new java.awt.Color(138, 48, 191));
38 | timePicker1.setDisplayText(txtTime);
39 |
40 | setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
41 |
42 | jButton1.setText("Show Time");
43 | jButton1.addActionListener(new java.awt.event.ActionListener() {
44 | public void actionPerformed(java.awt.event.ActionEvent evt) {
45 | jButton1ActionPerformed(evt);
46 | }
47 | });
48 |
49 | javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
50 | getContentPane().setLayout(layout);
51 | layout.setHorizontalGroup(
52 | layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
53 | .addGroup(layout.createSequentialGroup()
54 | .addGap(358, 358, 358)
55 | .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
56 | .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 185, javax.swing.GroupLayout.PREFERRED_SIZE)
57 | .addComponent(txtTime, javax.swing.GroupLayout.PREFERRED_SIZE, 194, javax.swing.GroupLayout.PREFERRED_SIZE))
58 | .addContainerGap(376, Short.MAX_VALUE))
59 | );
60 | layout.setVerticalGroup(
61 | layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
62 | .addGroup(layout.createSequentialGroup()
63 | .addContainerGap()
64 | .addComponent(txtTime, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
65 | .addGap(210, 210, 210)
66 | .addComponent(jButton1)
67 | .addContainerGap(287, Short.MAX_VALUE))
68 | );
69 |
70 | pack();
71 | setLocationRelativeTo(null);
72 | }// //GEN-END:initComponents
73 |
74 | private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
75 | timePicker1.showPopup(this, (getWidth() - timePicker1.getPreferredSize().width) / 2, (getHeight() - timePicker1.getPreferredSize().height) / 2);
76 | }//GEN-LAST:event_jButton1ActionPerformed
77 |
78 | /**
79 | * @param args the command line arguments
80 | */
81 | public static void main(String args[]) {
82 | /* Set the Nimbus look and feel */
83 | //
84 | /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
85 | * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
86 | */
87 | try {
88 | for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
89 | if ("Nimbus".equals(info.getName())) {
90 | javax.swing.UIManager.setLookAndFeel(info.getClassName());
91 | break;
92 | }
93 | }
94 | } catch (ClassNotFoundException ex) {
95 | java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
96 | } catch (InstantiationException ex) {
97 | java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
98 | } catch (IllegalAccessException ex) {
99 | java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
100 | } catch (javax.swing.UnsupportedLookAndFeelException ex) {
101 | java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
102 | }
103 | //
104 |
105 | /* Create and display the form */
106 | java.awt.EventQueue.invokeLater(new Runnable() {
107 | public void run() {
108 | new Main().setVisible(true);
109 | }
110 | });
111 | }
112 |
113 | // Variables declaration - do not modify//GEN-BEGIN:variables
114 | private javax.swing.JButton jButton1;
115 | private com.raven.swing.TimePicker timePicker1;
116 | private javax.swing.JTextField txtTime;
117 | // End of variables declaration//GEN-END:variables
118 | }
119 |
--------------------------------------------------------------------------------