DAY_017[국비] 자바 웹프로그래밍 과정

Bona의 블로그 입니다.·2022년 10월 21일
0

국비과정

목록 보기
18/99
post-thumbnail

 🌞 Day 017 

  • ...



 📚 Swing (2) 

 🔹 어제 마지막 예제 해설 

  • t1에 있는 텍스트를 t2로 옮기면 t1을 빈칸으로 만들기 추가

 📒 패널 - JPanel 

  • 패널
    : 보조 컨테이너, 컨테이너 위에 올라갈 작은 컨테이너

  • layout과 panel을 같이 사용하면 좀 더 깔끔하고 복잡한 구성을 사용할 수 있다.

  • Layout을 적용한 panel을 컨테이너에 올려서 사용


 📒 계산기 만들기 

 🔹 패널과 레이아웃 익숙해지기 

  • 컨테이너의 레이아웃 : 5행 1열의 GridLayout
    • 1행 : JPanel p1 배치 -> p1에는 GridLayout으로 TextField 한 개
    • 2행 : JPanel p2 배치 -> p2에는 GridLayout으로 버튼 4개 (7, 8, 9, +)
    • 3행 : JPanel p3 배치 -> p3에는 GridLayout으로 버튼 4개 (4, 5, 6, -)
    • 4행 : JPanel p4 배치 -> p4에는 GridLayout으로 버튼 4개 (1, 2, 3, x)
    • 5행 : JPanel p5 배치 -> p5에는 GridLayout으로 버튼 4개 (C, 0, =, ÷)

※ 참고 : 컨트롤의 String에 폰트 적용하기
1. 폰트 객체를 만든다.
2. 생성한 객체를 컨트롤.setFont(폰트객체);를 사용해 적용한다.
3. 폰트 객체 생성 예시
Font f = new Font("굴림", Font.BOLD, 20);

  • 컨테이너와 패널을 같이 사용해서 버튼들을 계산기처럼 Swing 윈도에 표시해본는 것이 목표 : 내가 처음에 만든 코드 🔽

  • 해답코드 설명을 들으면서 수정한 부분 🔽

  • 연산역할을 할 버튼의 이름을 수정하고 (헷갈리지 않기 위해서) ActionListner를 추가할 준비를한다.

    • 텍스트 필드를 전역변수로 만들어서 다른 메서드에서도 사용할 수 있도록 만들어 놓기 -> 이벤트가 발생했을 때 텍스트필드에 변화가 생겨야 함

 🔹 ActionListener 추가하기 

  • 자바의 Swing에서는 컨트롤에 이벤트를 추가하기 위해서 ActionListener를 사용한다. 컨트롤을 가지고 있는 클래스에 ActionListner(인터페이스)를 implement(구현)하고 public void actionPerformed(ActionEvent e)를 <span 텍style="color:tomato">반드시 오버라이딩해야한다.

  • 컨트롤에 액션리스너 추가하기
    컨트롤객체.addActionListener(this);

  • 텍스트필드의 String가져오기 : .getText();

  • 숫자 입력과 Clear, 사칙연산, '='버튼까지 완성 🔽


 🔹 버튼 추가 : back, 제곱근, 1/n, 빈칸 

  • 패널을 하나 더 생성해서 텍스트필드가 들어간 자리 아래에 추가

  • 4개의 버튼을 새로 생성해서 새 패널에 넣는다.
    : 이 4개의 버튼은 각각 Backspace, 제곱근 구하기, 1/n계산 역할을 할 버튼들

  • 새 패널 배치 후 actionPerformed()메서드에 back키 구현까지 만들어보기

    • 사용할 메서드 : length(), substring(n,m)
    • String변수.length()
      : String의 글자 개수를 int로 리턴해줌
    • String변수.substring(n,m)
      : 일부 글자만 추출해서 리턴하는 메서드.

String.substring()

  • substring 메서드는 2개이다 int변수를 1개 받는 것과 2개를 받는 것이있다.
  • 필요에따라 골라서 쓰면 된다. (메서드 오버로딩)
  • 이 메서드도 0부터 순서를 세기때문에 index 숫자 넣을 때 조심!!!
  1. ()에 숫자 하나만 넣었을 때
    : 해당 위치의 문자부터 끝까지 추출
    예시) 1을 넣었다면 두 번째 문자부터 끝까지
  2. ()에 숫자 두 개를 넣었을 때
    : 앞이 시작 index, 뒤가 마지막 index라고 생각하면 되고
    앞은 포함, 뒤는 포함 X
    예) (0, 11) ➡️ 첫 번째부터 11번째 문자까지
         (1, String.length() ) ➡️ ERROR!!, 범위를 벗어남
    Strigng.length가 5라면 문자 5개짜리이고 마지막 인덱스는 4!!
         (0, String.length()-1) ➡️ 처음부터 마지막 바로 "앞" 문자까지
    (마지막 한 개만 날림)


💙 제곱근 구하는 버튼


💙 1/n 버튼



 📚 Swing 달력 만들기 

 📒 달력출력하기 

  • 지금까지 배운 내용을 사용해서 달력을 보여주는 Swing 윈도를 구성하기

  • 윈도에 컨트롤을 배치하고 이번달 출력까지

※ 참고

Java에서 두 날짜를 비교하는 메서드

  • before()
    : date값이 주어진 date보다 이전이면 true 반환한다.
  • after()
    : date값이 주어진 date보다 이후이면 false 반환한다.
  • equals()
    : date값이 주어진 date와 같으면 true 반환한다.

    💠 drawCalendar 메서드에서 날짜를 채우는 반복문에 .before() 사용

 🔹 이번달, 다음달 이벤트 추가 

  • ActionListner 설정 후에 이전달, 다음달 버튼을 클릭하면,
    현재 달력이 이전달, 다음달 달력으로 바뀌게 코딩

  • 다음달부터 완성후 이전달 추가

  • 새달력이 출력되면 표시된 년,월도 해당 년,월로 수정


 🔹 확인 이벤트 추가 

  • 년, 월을 직접 입력하고 확인 버튼을 클릭하면 입력한 달의 달력이 출력되도록 코딩하기

  • 내가 작성한 코드 🔽

  • 고칠 점
    : 현재 텍스트필드의 year와 month String값을 가져오는 코드가 위에 있으므로 굳이 다시 쓸 필요가 없이 drawCalender()를 호출하기만 하면 된다.
    ➡️ 2줄 삭제해도 똑같이 정상 작동됨



 🎪 정리하면서... + 3주차 회고 

  • 새로 배우는 것들과 어제까지 배웠던 것들을 같이 활용한 복잡하고 긴 예제들을 써보고 배우는 것은 보람있었다.
  • 그렇지만 속도도 너무 빠르고 새로운 메서드가 코드에 나오거나 사용해야할 때에서 설명없이 작성된고 보고 따라쓰고만 한다거나 전에 사용해 보지 않은 메서드를 사용해야한다고 말만하고 설명을 안해준다거나 하는 경우는 좀 난감했다.
  • 내 경우 국비를 들으려고 6,7개월을 코드 공부를 따로 했고 영타연습, 단축키 연습을 따로 했음에도 불구하고 따라서 코드치기도 바빴고 한 화면에 다 들어오지 않는 코드 임에도 쓱 보여주고 넘어가거나 갑자기 수정하는 등 보고 쓴다기 보다 이거 추가하라고 했지 하면서 내가 직접 넣은 경우도 왕왕 있었다.
  • 솔직히 블로그에 정리하면서도 설명이 없거나 혹은 따라쓴 설명이 어순이 이상해서 잘 이해가 안되거나해서 따로 검색하고 공부해서 정리한 내용들이 많았다.
  • 정보처리기사자격증 반인데도 자격증 공부는 절반은 혼자 공부해야 할 것 같다. 심지어 과정평가형 반이라서 매주 1회 내부평가를 보고 그 점수가 자격증 점수에 반영되는데...
  • 혹시 몰라서 등록하기전에 한달동안 자바를 벼락치기로 기본문법을 머리에 우겨 넣어서 다행이었다. JS만 배우고 수업을 들었으면 못하겠다고 도망치거나 매일 울면서 밤샘공부를 했을듯.
  • 앞으로 예습을 못했던 부분이 나오면 어떻게 따라갈지 걱정이다. 진짜 주말도 개인 시간 없이 풀로 공부만 해야할 듯 하다.
profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글