1. 소수 출력하기
- 화면에 숫자 10이 초기화되어 있음
- '+' 버튼을 누르면 숫자보다 큰 가장 작은 소수(즉, 10보다 큰 가장 작은 소수는 11)로 문자열을 변경
- '-' 버튼을 누르면 숫자보다 작으면서도 가장 큰 소수(즉 10보다 작은 소수 중 가장 큰 것은 7)로 변경
단, '-'버튼을 누를때 제일 작은 소수는 2이므로, 그 이하로 내려가지 않아야 함
[코드설명]
<MyFrame()클래스>
-MyFrame() 클래스 내부에서 이벤트 처리할 수 있도록
JFrame 상속받는 동시에 ActionListener도 implement 시켜두었다.
class MyFrame extends JFrame implements ActionListener{
//필드
private JButton plus, minus;
private JLabel label;
//생성자
public MyFrame() {
this.setSize(350, 300); //프레임 크기 지정
this.setLocationRelativeTo(null); //윈도우 창 정 가운데에 창 띄움
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().setLayout(null); //절대위치로 지정위해 null설정
this.setTitle("자바 과제 1");
plus = new JButton("+"); //+ 버튼 생성
minus = new JButton("-"); //- 버튼 생성
label = new JLabel("10"); //출력 레이블 생성
//컴포넌트 위치 크기, 설정 (절대위치로 직접 setBounds() 메소드로 설정)
plus.setBounds(30, 170, 122, 30);
minus.setBounds(182, 170, 122, 30);
label.setBounds(120, 50, 90, 50);
label.setHorizontalAlignment(JLabel.CENTER); //레이블 가운데 정렬 시킴
//+, - 버튼에 MyFrame() 클래스 속에 소속된 이벤트리스너를 등록한다.
plus.addActionListener(this);
minus.addActionListener(this);
//프레임에 +, -, 레이블 컴포넌트를 등록한다.
add(plus);
add(minus);
add(label);
//화면에 보이도록 설정
this.setVisible(true);
}
<이벤트 처리> actionPerformed() 메소드 재정의
-plus 버튼과 minus 버튼에 대한 이벤트 처리
<+> 버튼 누를 경우,
현재의 레이블 값보다 큰 소수로 변경 이벤트
<-> 버튼 누를 경우,
현재의 레이블 값보다 작은 소수로 변경 이벤트
public void actionPerformed(ActionEvent e) {
if(e.getSource() == plus) { //plus 버튼 눌렀을 경우
int i;
int num = Integer.parseInt(label.getText()); //현재의 레이블 얻어 정수로 변환
num++; //현재 값보다 큰 소수여야 하므로 일단 ++처리
for(i=2; i <= num; i++) { //2~num사이의 숫자 중에서
if(num%i == 0) { //num을 나눌 수 있는 i중
if(i == num) { //오직 자기 자신만 나누는 i에 대해(소수)
label.setText(String.valueOf(i)); //setText()처리
break; //찾았으면 탈출
}
num++; //못찾았으면 다음 num++으로 반복 진행
}
}
}
if(e.getSource() == minus) { //minus 버튼 눌렀을 경우
int i;
int num = Integer.parseInt(label.getText());//현재의 레이블 얻어 정수로 변환
num--;//현재 값보다 작은 소수여야 하므로 일단 --처리
for(i=2; i<=num; i++) { //2~num사이의 숫자 중에서
if(num%i == 0) {//num을 나눌 수 있는 i중
if(i == num) {//오직 자기 자신만 나누는 i에 대해(소수)
label.setText(String.valueOf(i)); //setText()처리
break; //찾았으면 탈출
}
num--;//못찾았으면 다음 num--로 반복 진행
}
<실행 main>
public class home_1 {
public static void main(String[] args) {
new MyFrame(); // 위의 기능 구현할 수 있도록 MyFrame() 객체 생성시킴
}
}
[실행결과화면]
초기값 10의 상태에서 + 버튼을 누르면 -> 11 -> 13 -> 17
초기값 10의 상태에서 – 버튼을 누르면 -> 7 -> 5-> 3
'Java > [학교] Java_GUI' 카테고리의 다른 글
[과제] 자바_GUI_2진수를 10진수로 만드는 간단한 프로그램 (0) | 2021.12.12 |
---|---|
[과제] 자바_GUI_긴문자열에서 숫자만 추출해오기 (0) | 2021.12.12 |
[과제] 자바_연결리스트_구현 (0) | 2021.12.12 |
자바_프로젝트_스윙_(리듬게임) (0) | 2021.12.12 |
ch12. 스윙 컴포넌트들 (0) | 2021.10.05 |