[과제] 자바_GUI_ 소수 판별 및 출력

728x90

1. 소수 출력하기

- 화면에 숫자 10이 초기화되어 있음

- '+' 버튼을 누르면 숫자보다 큰 가장 작은 소수(, 10보다 큰 가장 작은 소수는 11)로 문자열을 변경

- '-' 버튼을 누르면 숫자보다 작으면서도 가장 큰 소수(10보다 작은 소수 중 가장 큰 것은 7)로 변경

, '-'버튼을 누를때 제일 작은 소수는 2이므로, 그 이하로 내려가지 않아야 함

                                                                                                                                                        

[코드설명]

<MyFrame()클래스>

-MyFrame() 클래스 내부에서 이벤트 처리할 수 있도록

             JFrame 상속받는 동시에 ActionListenerimplement 시켜두었다.

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

728x90