Frame07Me (필자 작성 코드)
package test.main;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Frame07Me extends JFrame implements ActionListener{
//필드
JTextField tf_num;
//생성자
public Frame07Me () {
setLayout(new BorderLayout());
//JPanel
JPanel topPanel=new JPanel();
topPanel.setBackground(Color.blue);
//Panel 을 북쪽에 배치하기
add(topPanel, BorderLayout.NORTH);
//JTextField 객체를 만들에서 JPanel 에 추가하기
tf_num=new JTextField(10);
topPanel.add(tf_num);
//기능 버튼 객체를 만들어서 JPanel 에 추가하기
JButton MyBtn=new JButton("실행하기");
topPanel.add(MyBtn);
//버튼에 액션 리스너 등록
MyBtn.addActionListener(this);
}
public static void main(String[] args) {
Frame07Me frame=new Frame07Me();
//프레임의 제목 설정
frame.setTitle("계산기");
//프레임을 닫으면 자동으로 프로세스가 종료 되도록 한다.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 500, 500);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String strNum1=tf_num.getText();
try {
int num1=Integer.parseInt(strNum1);
new Thread(new Runnable() {
@Override
public void run() {
//run 메소드 안쪽이 새로운 작업 단위가 된다.
int count=0;
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
count++;
int result=num1*count;
System.out.println(num1+" x "+count+" = "+result);
if(count==9) {
break;
}
}
}
}).start();
}catch(NumberFormatException nfe) {
JOptionPane.showMessageDialog(this, "숫자 형식으로 입력하세요");
}
}
}
Frame07 (선생님 작성 코드)
package test.main;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class Frame07 extends JFrame implements ActionListener{
JTextField tf;
//생성자
public Frame07(String title) {
super(title);
//레이아웃 설정
setLayout(new FlowLayout());
this.tf=new JTextField(10);
JButton printBtn=new JButton("출력하기");
add(tf);
add(printBtn);
//버튼에 리스너 등록
printBtn.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
//main 스레드에서는 새로운 스레드를 시작만 시키고
new Thread(()->{
//입력한 문자열을 읽어온다.
String inputNum=tf.getText();
//입력한 숫자형태의 문자열을 실제 정수로 바꾸기
int num=Integer.parseInt(inputNum);
for(int i=0; i<9; i++) {
//1초씩 지연시키기
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
int result=num*(i+1);
System.out.println(num+" x "+(i+1)+" = "+result);
}
}).start();
//바로 리턴한다.
System.out.println("actionPerformed() 메소드가 리턴됩니다.");
}
public static void main(String[] args) {
JFrame frame=new Frame07("구구단 예제");
//프레임을 닫으면 자동으로 프로세스가 종료 되도록 한다.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 500, 500);
frame.setVisible(true);
}
}
숫자를 입력하고 출력하기 버튼을 누르면 구구단을 출력하는 심화 예제이다. 지금까지 배운 것들을 다수 활용해야 한다.
'java' 카테고리의 다른 글
Step16_InputOutput(File class) (0) | 2022.08.04 |
---|---|
Step16_InputOutput(문자 입출력, InputStream, OutputStream) (0) | 2022.08.04 |
Step15_Thread (다양한 방식으로 Thread 만들기) (0) | 2022.08.03 |
Step14_Swing (Layout, addActionListener 심화 예제 CalcFrame) (0) | 2022.08.03 |
Step14_Swing (addActionListener 기본 예제) (0) | 2022.08.03 |