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 |