Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- ai개발밋업
- 정보처리기사
- 2020정보처리기사
- Django
- 부스트캠프 AI Tech
- 리눅스7장
- 리눅스연습문제
- ann
- MAC OS
- CNN
- Swing
- homebrew설치
- GitHub
- backpropagation
- Python
- 파이썬
- Git
- java
- 쉽게배우는운영체제
- AIStages
- 판교퇴근길밋업
- repository 복구
- github branch
- 운영체제연습문제
- 자바
- 우분투리눅스
- 딥러닝
- RNN
- 운영체제
- BPTT
Archives
- Today
- Total
코딩하는 애옹😸
[SWING] 스레드 / StopWatch 본문
728x90
반응형
JAVA Programming
스레드를 이용하여 스탑워치를 만드는 프로그램
import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class StopWatchEx extends JFrame{ JButton start, reset, pause; Thread p_display, t_display; JLabel w1, w2, w3; int mm, ss, ms, t=0; /* mm : minute * ss : second * ms : millisecond * (0.01s) */ public StopWatchEx() { super("스탑워치"); buildGUI(); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation(600, 300); this.setVisible(true); this.setResizable(false); this.pack(); } private void buildGUI() { JPanel p = new JPanel(new BorderLayout()); JPanel bp = new JPanel(new FlowLayout(FlowLayout.CENTER)); JPanel wp = new JPanel(new FlowLayout(FlowLayout.CENTER)); JLabel c1 = new JLabel(" : "); JLabel c2 = new JLabel(" : "); w1 = new JLabel("00"); w2 = new JLabel("00"); w3 = new JLabel("00"); start = new JButton("START"); pause = new JButton("PAUSE"); reset = new JButton("RESET"); bp.add(start); bp.add(pause); bp.add(reset); wp.add(w1); wp.add(c1); wp.add(w2); wp.add(c2); wp.add(w3); p.add(wp, BorderLayout.CENTER); p.add(bp, BorderLayout.SOUTH); add(p); start.setFont(new Font("serif",Font.BOLD,25)); pause.setFont(new Font("serif",Font.BOLD,25)); reset.setFont(new Font("serif",Font.BOLD,25)); w1.setFont(new Font("courier",Font.BOLD,30)); w2.setFont(new Font("courier",Font.BOLD,30)); w3.setFont(new Font("courier",Font.BOLD,30)); c1.setFont(new Font("courier",Font.BOLD,30)); c2.setFont(new Font("courier",Font.BOLD,30)); pause.setEnabled(false); reset.setEnabled(false); start.addActionListener(new ButtonListener()); pause.addActionListener(new ButtonListener()); reset.addActionListener(new ButtonListener()); } class ButtonListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { String s = e.getActionCommand(); if (s.equals("START")) { start.setEnabled(false); pause.setEnabled(true); reset.setEnabled(false); p_display = new Thread(new Runnable() { @Override public void run() { mm = Integer.parseInt(w1.getText()); ss = Integer.parseInt(w2.getText()); ms = Integer.parseInt(w3.getText()); while (p_display == Thread.currentThread()) { mm = t % (1000*60) / 100 / 60 ; ss = t % (1000*60) / 100 % 60 ; ms = t %100; try { Thread.sleep(10); w1.setText(String.format("%02d", mm)); w2.setText(String.format("%02d", ss)); w3.setText(String.format("%02d", ms)); t++; }catch (InterruptedException e1) {} } } }); p_display.start(); } else if (s.equals("PAUSE")) { start.setEnabled(true); pause.setEnabled(false); reset.setEnabled(true); p_display = null; }else if(s.equals("RESET")) { start.setEnabled(true); pause.setEnabled(false); reset.setEnabled(false); w3.setText("00"); w2.setText("00"); w1.setText("00"); t=0; } } } public static void main(String[] args) { new StopWatchEx(); } }
<요구사항>
- 2개의 패널로 구성 (p_display, p_button)
- 시작시 START 버튼만 활성화
[START] : 버튼이 눌리면 0.01초에 한 번씩 카운트한 결과를 화면에 표시 / 현재 상태 (중지된 마지막 시작 값) 이후로 계속 진행
[PAUSE] : 버튼이 눌리면 중지
[STOP] : 초기화
<결과물>
milisecond는 10진법이고 second는 60진법이라 계산하는데 머리가 아팠습니다 😂😂
아쉬운 점은 메인 스레드와 작업 스레드를 나눠서 구현했다면 지연없이 더 정확한 스탑워치를 만들었지 않았을까 하는 것입니다....ㅎ
반응형
'Programming > Java' 카테고리의 다른 글
[SWING] 성적분포표 나타내기 / 성적산출 (0) | 2019.11.25 |
---|
Comments