패널
: 보조 컨테이너, 컨테이너 위에 올라갈 작은 컨테이너
layout과 panel을 같이 사용하면 좀 더 깔끔하고 복잡한 구성을 사용할 수 있다.
Layout을 적용한 panel을 컨테이너에 올려서 사용
※ 참고 : 컨트롤의 String에 폰트 적용하기
1. 폰트 객체를 만든다.
2. 생성한 객체를컨트롤.setFont(폰트객체);
를 사용해 적용한다.
3. 폰트 객체 생성 예시
Font f = new Font("굴림", Font.BOLD, 20);
컨테이너와 패널을 같이 사용해서 버튼들을 계산기처럼 Swing 윈도에 표시해본는 것이 목표 : 내가 처음에 만든 코드 🔽
해답코드 설명을 들으면서 수정한 부분 🔽
연산역할을 할 버튼의 이름을 수정하고 (헷갈리지 않기 위해서) ActionListner를 추가할 준비를한다.
자바의 Swing에서는 컨트롤에 이벤트를 추가하기 위해서 ActionListener를 사용한다. 컨트롤을 가지고 있는 클래스에 ActionListner(인터페이스)를 implement(구현)하고 public void actionPerformed(ActionEvent e)
를 <span 텍style="color:tomato">반드시 오버라이딩해야한다.
컨트롤에 액션리스너 추가하기
컨트롤객체.addActionListener(this);
텍스트필드의 String가져오기 : .getText();
숫자 입력과 Clear, 사칙연산, '='버튼까지 완성 🔽
패널을 하나 더 생성해서 텍스트필드가 들어간 자리 아래에 추가
4개의 버튼을 새로 생성해서 새 패널에 넣는다.
: 이 4개의 버튼은 각각 Backspace, 제곱근 구하기, 1/n계산 역할을 할 버튼들
새 패널 배치 후 actionPerformed()메서드에 back키 구현까지 만들어보기
length()
, substring(n,m)
String.substring()
- substring 메서드는 2개이다 int변수를 1개 받는 것과 2개를 받는 것이있다.
- 필요에따라 골라서 쓰면 된다. (메서드 오버로딩)
- 이 메서드도 0부터 순서를 세기때문에 index 숫자 넣을 때 조심!!!
- ()에 숫자 하나만 넣었을 때
: 해당 위치의 문자부터 끝까지 추출
예시) 1을 넣었다면 두 번째 문자부터 끝까지- ()에 숫자 두 개를 넣었을 때
: 앞이 시작 index, 뒤가 마지막 index라고 생각하면 되고
앞은 포함, 뒤는 포함 X
예) (0, 11) ➡️ 첫 번째부터 11번째 문자까지
(1, String.length() ) ➡️ ERROR!!, 범위를 벗어남
Strigng.length가 5라면 문자 5개짜리이고 마지막 인덱스는 4!!
(0, String.length()-1) ➡️ 처음부터 마지막 바로 "앞" 문자까지
(마지막 한 개만 날림)
지금까지 배운 내용을 사용해서 달력을 보여주는 Swing 윈도를 구성하기
윈도에 컨트롤을 배치하고 이번달 출력까지
※ 참고
Java에서 두 날짜를 비교하는 메서드
- before()
: date값이 주어진 date보다 이전이면 true 반환한다.- after()
: date값이 주어진 date보다 이후이면 false 반환한다.- equals()
: date값이 주어진 date와 같으면 true 반환한다.
💠 drawCalendar 메서드에서 날짜를 채우는 반복문에 .before() 사용
ActionListner 설정 후에 이전달, 다음달 버튼을 클릭하면,
현재 달력이 이전달, 다음달 달력으로 바뀌게 코딩
다음달부터 완성후 이전달 추가
새달력이 출력되면 표시된 년,월도 해당 년,월로 수정
년, 월을 직접 입력하고 확인 버튼을 클릭하면 입력한 달의 달력이 출력되도록 코딩하기
내가 작성한 코드 🔽
고칠 점
: 현재 텍스트필드의 year와 month String값을 가져오는 코드가 위에 있으므로 굳이 다시 쓸 필요가 없이 drawCalender()를 호출하기만 하면 된다.
➡️ 2줄 삭제해도 똑같이 정상 작동됨