본문 바로가기
IT/JAVA

[Java] java.awt.event - 야구게임 완성 (디자인,Controller,Service 3개로 분리) / 유효성검사

by 행복한 용용이 2020. 10. 4.
반응형

BaseBall

1. BaseBallController와 BaseBallService Class 만듦

BaseBall은 디자인만

Controller는 신호등역할 뭐 누르면 어디로가라 di


2.BaseBall에서 Event Source 될 수 있는 것 6개 다 AcitonListener

BaseBallController에 implements ActionListener하고 Override도 함


3. 아까처럼 BaseBallController에

썼더니 newG 없음


4. BaseBall

BaseBallController


5.

Controller는 뭐할때 뭐만해라만 하고

Logic은 BaseBallService에서 구현


6. 이제 controller에 service 연결하고 메소드들 연결

그리고 cntl + 1 눌러서 자동으로 다 Create method 해서 BaseBallService에 method 만듦


7. BaseBallService와 BaseBall을 연결한다.

BaseBallController

cntl+1 눌러 자동 생성자 생성

BaseBallService

이제 사용할 때

이렇게 사용. **TextArea에서 setText할때는 아무것도 없이는 안됨. 공백이라도 줘야함.

BaseBall에 감시자 붙여줌.

그럼 이제 Clear 누르면 TextArea에 썼던거 지워짐

이제 TextArea에 글씨 자기가 못쓰게 막음

setEditable : 커셔는 들어가는데 수정 못함

setEnable : 아예사용을 못함. 커셔도 못들어감.


8. newGame

이제 예전에 했던 야구게임 코드를 복사

이제 Math.random 말고 random클래스 씀


9. exit()


10. showDap()


11. game()


유효성검사

 

    public void game() {

           // int count =0;   //count는 전역변수로 해야한다.

 

           int strike =0;

           int ball =0;

            // 숫자입력

            String myNumStr = baseBallController.baseBall.tf.getText().trim();

            //textfield에서 쓴 text 받아옴

            baseBallController.baseBall.tf.setText("");

 

            if(myNumStr.length() != gameLength) {

                viewResult("3자리 숫자를 입력하세요!!!");

                return;

            }

 

            if(!isNumber(myNumStr)) { //숫자가 아니라면

                viewResult("숫자만 입력하세요!!!");

                return;

            }

 

            for(int i=0;i<gameLength;i++) {

                my[i] = myNumStr.charAt(i) -48;

                // char을 얻어옴으로 아스키코드값 가져온다. 따라서 -48해야함

           

                //무조건 3자리 수라면 저번에 NumberBaseBall에서 쓴 방법이 더 좋다.

 

// 숫자와 자리수 비교

// 328         149

 

            for (int m = 0; m < gameLength; m++) {

                for (int c = 0; c < gameLength; c++) {

                    if(my[m] == com[c]) { //같은 숫자라면..

                        if(m == c)//자리수 같다면...

                            strike++;

                        else

                            ball++;

                    }

                }

            }

            count++;

 

 

// 결과

 

            if(strike != gameLength) { //3이 아니라면

               viewResult(count + ". " + myNumStr + "은 " + strike + "스트라이크 " + ball + "볼입니다.");

            } else {

                viewResult(myNumStr + "을 " + count + "번만에 정답입니다.");

                viewResult("새게임 또는 종료를 누르세요!!");

                baseBallController.baseBall.tf.setEnabled(false);

            //정답맞췄는데도 계속 못치도록setEnabled

            }

    }

 

    private void viewResult(String msg) {

        baseBallController.baseBall.ta.append(msg+"\n");

    }

 

    private boolean isNumber(String str) {

        //return type이 boolean이면 is를 붙인다.

        boolean flag = true;

        for(int i=0; i<gameLength; i++) {

            int y = str.charAt(i)-48;

            if (y>9 || y<0) {

                flag = false;

                break;

            }

        }

        return flag;

    }


12. 정답맞아서 새게임 눌렀을 때 textfield 다시 쓸 수 있게 하고

textarea 다시 clear , count도 초기화


 

13. 답 알려줬을 때 새게임 또는 종료만 되도록


14. 폰트 색 바꾸기 눌렀을 때 FontColorChooser 열리게

ColorSelector 코드 다 가져오기

main 지우기 : 단독적으로 실행될 수 없음으로

BaseBall에 FontColorChooser를 has 관계로 해줌

FontColorChooser의 setVisible 없앰 //

BaseBallService에서 fontColorChange method 실행했을때 FontColorChooser를 setVisible해줌

컬러츄저의 리스너 베이스볼로 가져옴 임플리먼츠와오버로드는 컨트롤러에

리스너를 this가 아닌 컨트롤러로

오버라이드한

fontcolorchoor 에 있는 changeColor를

이제 컬러 선택하면 반영되게

베이스볼에

컨트롤러에 버튼 눌럿을때 이벤트 메소드 생성

cntl+1 만들어 create method 함

추가로 r,g,b를 전역변수로

그리고 폰트칼라 추저 창을 닫음

[출처] 빡쏘끼룩

반응형

'IT > JAVA' 카테고리의 다른 글

[Java] Window 창 닫는 code  (0) 2020.10.06
[Java] 계산기 Code  (0) 2020.10.05
[Java] java.awt.event - Logic과 디자인 2개로 분리  (0) 2020.10.03
[Java] java.awt.event 예제  (0) 2020.10.02
[Java] java.awt.event  (0) 2020.10.01