자바 스윙 GUI 디지털시계 만들기 (1편)-시간출력
- 프로그래밍/JAVA
- 2018. 12. 2.
자바 스윙 GUI 디지털시계 만들기
안녕하세요.
얼마전에 프로젝트로 시계를 만들었습니다.
그래서 오늘은 자바에서 스윙으로 디지털시계를 한번 만들어볼까해요.
오늘할 내용.
2. 콘솔창에 출력이 잘 된다면 JFrame에도 출력가능하게 만든다.
3. 문제점
4. 해결방법
5. readme&*소스코드는 글의 맨 아래에 있습니다.
아래 사진은 오늘 완성할 시계사진이에요.
물론 오늘은 시간출력까지만 하고 폰트는 다음시간에 적용할거고요. ㅎㅎ
1. 시간을 받아오기
먼저 시계를 만들려면 시간을 받아와야되요.
*그 전에 gui시계를 만드려고 하니 이클립스를 열어서 프레임을 만들어주세요.(아래글 참고)
아마 위의 사진처럼 프레임을 만드는 것 까지 하셨을겁니다.
그럼 이제 시간을 받아오도록 만들어보겠습니다.
저는 timeget이라는 메소드를 하나 만들어서 생성자에 넣었습니다.
한번 실행해보니 시간을 받아오지만 timeget을 호출했을때 한번만 받아오네요.
그럼 이번에는 여러번 받아오도록 while문 안쪽에 넣어보겠습니다.
원했던대로 계속 시간을 받아오지만 노트북의 팬이 갑자기 돌아가기 시작합니다.(컴퓨터의 자원을 엄청 쓴다는 이야기죠.)
시간을 받아오지만 너무 자주 받아와서 시간이 제대로 변하는지도 확인하지 못하겠네요.
try/catch문을 사용해서 0.1초에 한번씩 시간을 받아오도록 하겠습니다.
(sleep(1000)==1초 입니다.)
콘솔창에서는 잘 받아오는 것을 확인할 수 있었습니다.
2.JFrame에 시간 출력하기
뭐 panel에 출력하는분도 있지만 저는 그냥 JFrame에 출력하겠습니다.
시간을 출력하기 위해서 JLabel을 만들어 넣어줄겁니다.
(년도, 월, 일, 요일)과 (pm/am, 시간, 분, 초, msec)를 두줄로 출력하기 위해서 저는 JLabel을 두줄로 만들겠습니다.
만들고 라벨에 설정을 해주었습니다.
이제 저 라벨에 시간을 출력해보겠습니다.
시간을 출력하기 위해서 만든 라벨에 글을 추가하려면 문자열이여야 합니다.
그러니 문자열로 만들어줍시다.
만든다음에 setText로 JLabel에 추가해주세요.
아마 이렇게 나올겁니다.
분명 두줄을 추가했는데 한줄밖에 나오지 않습니다.
3. 문제점.
여기서 문제점이 보입니다.
문제점 1. 사진에는 나오지 않았지만 요일이 숫자로 나오는 매우 사소한 문제가 있습니다.
문제점 2. 저는 분명 JFrame을 두개 추가했는데 한줄밖에 보이지 않습니다.
물론 한줄에 다 넣으면 나오기는 하겠죠.
문제점 3. 시간이 겹쳐서 보입니다.
(사소한 문제점 제가 Thread에 대한 이해가 살짝 부족함)
문제점 4 . 이문제는 문제점 1보다 더욱 사소한 문제입니다. 12시가 0시로 나옵니다.
근데 귀찮으니 이건 해결하지 않겠습니다.
4. 해결방법.
문제점 1 해결방법.
요일이 숫자로 나오는 문제는 스위치문으로 해결했습니다.
문제점 2 해결방법.
이것을 해결하는 방법을 생각해봤습니다.
먼저 thread를 이용하는 방법.
그냥 다시 그리는 방법.
이 둘중에서 저는 thread를 잘 몰라서 다시 그리는 방법을 사용했습니다.
*물론 다시 그리는 방법이 좋다는게 아닙니다.
문제점 3 해결방법.
이 문제는 문제 2에서 repaint를 해주니 바로 해결되었습니다.
5.ReadMe
소스코드에 폰트부분이 없어서 실행했을때의 사진은 맨 위에 보여드린 사진과는 살짝 다릅니다.
소스코드 역시 살짝 다른부분이 있지만 그부분은 기능과 상관이 없는 클래스의 이름같은 부분입니다.
소스코드는 제가 글을 다 쓰고 글에 맞추어 나누었습니다. 모든 문제점 3까지 해결한 코드는 blog4코드입니다.
이클립스에 추가하셔서 보셔도 되고 압축해제하셔서 .java파일을 보셔도 됩니다.
(아래 보이는 네모박스에서 자바 이클립스 프로젝트 파일열기 참고하시면 됩니다.)
*폰트를 추가하는 방법은 나중에 추가하겠습니다. ㅎㅎ
위 코드에서 폰트만 바꾸면 맨위의 사진처럼 됩니다.