수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

타이머에 대한 질문드려요

살랑살랑

2023.04.01



목표는 테트리스인데요. 한게임 들어가서 게임구성을 보니까 스톱워치처럼 타이머가 있더라구요
부분적으로 구현을 해서 응용하려고 합니다.
현재 스톱워치에 라벨(시간을 00:00:00으로 표시될 것이며 초기화 함), 버튼(시작, 멈춤, 리셋)으로
틀을 구현하였습니다.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
class boo extends jframe implements actionlistener{

static jlabel la; //입력한 숫자 표시 레이블
//jtextarea ta; //볼카운트 기록 보여주는 텍스트 에어리어
jbutton[] buttons= new jbutton[3];
container con;
jpanel pan01;//label 컴포넌트
jpanel pan02;//button 컴포넌트 컨테이너에 추가
jframe fr;
thread th;
formatter format;

public boo(){
super(count);
calendar cal = calendar.getinstance();
int hour = cal.get(calendar.hour);
int min = cal.get(calendar.millisecond);
int sec = cal.get(calendar.second);

fr = new jframe();

buttons[0] = new jbutton(start);
buttons[1] = new jbutton(stop);
buttons[2] = new jbutton(reset);
fr = new jframe();
//con = fr.getcontentpane();

pan01 = new jpanel();
pan02 = new jpanel();

pan01.setbackground(color.white);
pan02.setbackground(color.gray);

add(borderlayout.center,pan01);
add(borderlayout.south, pan02);

la = new jlabel(00:00:00);
la.setfont(new font(courier new, font.bold, 20));
pan01.add(la);

pan02.add(buttons[0]);
pan02.add(buttons[1]);
pan02.add(buttons[2]);

buttons[0].setfont(new font(courier new, font.bold, 15));
buttons[1].setfont(new font(courier new, font.bold, 15));
buttons[2].setfont(new font(courier new, font.bold, 15));

buttons[0].addactionlistener(this);
buttbsp;buttons[1].addactionlistener(this);
buttons[2].addactionlistener(this);
settitle(퐁퐁퐁);
setsize(300,100);
setvisible(true);
}
public void actionperformed(actionevent e){
string eventname = e.getactioncommand();
if(eventname.equals(start)){
buttons[0].setenabled(false);
buttons[1].setenabled(true);
buttons[2].setenabled(false);
if(th != null){
th.start();
}
//la.settext(string.format(%2d:%2d:%2d));
//la.settext(%2d:%2d:%2d, hour, min, sec);
}
else if(eventname.equals(stop)){
buttons[0].setenabled(true);
buttons[1].setenabled(false);
buttons[2].setenabled(true);
if(th == null){
th = null;
}
}
else{
buttons[0].setenabled(true);
buttons[1].setenabled(false);
buttons[2].setenabled(false);
la.settext(00:00:00);
}
}

public void run(){
while(true){
try{
thread.sleep(1000);
}catch(exception e){
e.printstacktrace();
}//interruptedexception, e.printstacktrace()
}
if(th != null){//time 출력
la.settext(integer.tostring(integer.parseint(la.gettext())+1));
}
else
break;
}

//addwindowlistener(new windowadaptor(){
public void windowclosing(windowevent e){
dispose();
system.exit(0);
}
//});
}
class bee{
public static void main(string args[]){
boo bo = new boo();
//new boo();
}
}
현재 컴파일 하면 프레임창이 떠서 구성한 버튼은 볼 수 있습니다.
소스는 에러상태이지만요;;

현재 if문 등 라벨에 타임이 스레드에 의해 동작이 되어야 하는데,
현재의 컴터 시간을 받아오는 것이 아니라 00:00:00에서부터 시작이기 때문에
상당히 헷갈리고 있습니다. 시작했다가 멈추게 되는데, 멈춤에서 리셋이 아니라 시작 버튼을 눌렀을때

타임은 다시 00부터가 아니라 아까 멈춘 시점부터 표시가 되야 합니다.

리셋이야 리셋버튼을 눌렀을때 초기화하세요라는 조건을 주면 되는것이지만,

시간(시간은 time()인덱스에서 찾기가 힘드네요. 책에는 날짜 부분이라 응용이 쉽지 않습니다.)은

count로 1초씩 더하세요 하면 될것도 같은데요.

그러니까, 제생각에 문제점은 타임표현에 대해서 무지한것 같습니다;;

그리고 버튼 하나마다 스레드를 줘서, 멀티스레드개념으로 boolean을 사용해서 동작하는 것과
하나의 스레드로 동작하는 것이 크게 문제 되지는 않는지 궁금합니다.

꾸벅;;

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

  • 이플

    고맙습니다 +_+
    해결해서 되는데로 올려보겠습니다 ㅎㅎ.

  • 아이뻐

    또 다른 방법으로는,
    Thread를 사용해서 Thread.sleep(1000); 마다 notify 시키는 방법이 있을겁니다.

    간단히 클래스를 구현해보자면

    class StopWatch implemented Runnable{

    public void run() {

    while(true) {
    try{
    Thread.sleep(1000);
    }catch(Exception e){}
    // 이부분에서 이벤트 발생(1초증가)

  • 맛깔손

    System 클래스 함수중에 millsecond 단위로 현재의 long타입 값을 반환하는 함수가 있습니다.
    보통은 어떤 함수의 수행속도 측정을 위해 사용을 하는데, 이 값을 이용하면 1000ms가 1초이므로 초단위로 카운트가 가능합니다. 그리고 아마도, 이미 자바 기본 지원 클래스중에 초단위로 반환하는 것이 있을 수도 있습니다.

번호 제 목 글쓴이 날짜
2695905 ASP로 개발됐을 때 css가 달라져요 ㅠㅠ (4) 슬아라 2025-05-24
2695878 form을 이용한 다른 페이지로 넘기는 방법을 알려주세요 (1) 핫파랑 2025-05-24
2695844 저기 암호화 및 복호화 프로그램.. 만들어볼려는대 (2) 한빛 2025-05-24
2695814 [질문] PDA에서 애플릿이 가능한가요? (1) 봄시내 2025-05-24
2695785 웹 설정 도와줄분 화이트캣 2025-05-23
2695730 갑자기 기억이 안나는데 accesskey 속성.. 빛나라 2025-05-23
2695702 [질문] Java 버전 차이에 의한 오류?!! (2) 검사 2025-05-23
2695672 자바 임베디드 쪽으로 배우고 싶은데요..질문이요.. (1) 뽀그리 2025-05-22
2695647 헉! 이클립스(v3.1)에서 발생되는 널포인트 익셉션? ;;; (3) 아빠몬 2025-05-22
2695586 IFRAME 캐싱 질문 봄나비 2025-05-22
2695498 [질문]실행가능한 jar파일.. 정말 이해가 안가네요... ㅡㅜ;; 터1프한렩 2025-05-21
2695468 자바랑 이클립스에서요.. 스킬 2025-05-21
2695375 Mysql 연동하는 자바 질문있습니다. 아리솔 2025-05-20
2695319 파워포인트 파일을 저장할 수 있을까요? 시윤 2025-05-19
2695289 [질문]Tween 값의 정도를 알고 싶습니다. 타마 2025-05-19
2695238 c 와 c++의 시작 (10) ChocoHoilc 2025-05-18
2695215 탑메뉴의 repeat-x .배경이 두가지에요ㅠ ㅠ 널위해 2025-05-18
2695187 자바스크립트와 자바의 import에 관해서 질문드려요 (1) 무슬 2025-05-18
2695116 테마 문의 (해당 사이트와 같은 테마 혹은 플러그인) Sweet 2025-05-17
2695084 [질문] starDrag()와 같은 함수 만들기 민구 2025-05-17
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com