코딩/JAVA
Thread 타이머
ADWELL
2022. 9. 16. 15:29
import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ThreadTest4 {
public static void main(String[] args) {
new ThreadTimerEx();
}
}
class ThreadTimerEx extends JFrame{
private static final long serialVersionUID = 1L;
JButton btn_Start, btn_Stop, btn_Clear;
JLabel timerLabel;
boolean run_chk = false;
public ThreadTimerEx() {
setTitle("스레드 타이머");
setBounds(50,50,300,300);
JPanel panel = new JPanel();
panel.setLayout(null);
timerLabel = new JLabel("000");
timerLabel.setFont(new Font("Gothic", Font.ITALIC, 80));
timerLabel.setBounds(10, 10, 265, 200);
timerLabel.setHorizontalAlignment(JLabel.CENTER);
timerLabel.setBackground(Color.YELLOW);
timerLabel.setOpaque(true);
panel.add(timerLabel);
btn_Start = new JButton("START");
btn_Stop = new JButton("STOP");
btn_Clear = new JButton("CLEAR");
BtnEvent btnEvent = new BtnEvent();
btn_Start.addActionListener(btnEvent);
btn_Stop.addActionListener(btnEvent);
btn_Clear.addActionListener(btnEvent);
JPanel btnPanel = new JPanel(new GridLayout(1,3));
btnPanel.setBounds(10, 215, 265, 40);
btnPanel.add(btn_Start);
btnPanel.add(btn_Stop);
btnPanel.add(btn_Clear);
panel.add(btnPanel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
add(panel);
}
private class BtnEvent implements ActionListener{
int cnt = 0;
@Override
public void actionPerformed(ActionEvent e) {
JButton button = (JButton)e.getSource();
if(button == btn_Start) {
if(run_chk) return;
run_chk = true;
new Thread(new Runnable() {
@Override
public void run() {
while(run_chk) {
timerLabel.setText(String.format("%03d", cnt));
cnt++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}else if(button == btn_Stop) {
run_chk = false;
}else if(button == btn_Clear) {
run_chk = false;
cnt = 0;
timerLabel.setText(String.format("%03d", cnt));
}
}
}
}