HashMap의 constains()
는 hashCode()
를 사용한다.
hashCode 메서드의 오버라이딩은 정~말 특별한 경우를 제외하고는 권장하지 않는다.
이미 중복값이 발생되지 않도록 철저히 준비된 연산을 다른 연산으로 바꿔서 실행하는 것 자체가 자바의 코딩 규칙을 무너뜨릴 가능성이 있기 때문이다.
다만 오버라이딩이 불가능한 동작이 아니므로 오버라이딩이 가능 하다고 이해하기 위한 예제이다.
에러(Error) : 잘못된 것, 에러가 존재하는 경우 실행될 수 없음
예외(Exception) : 잘못된 것, 특정 상황 또는 조건이 만족되는 경우 프로그램이 종료되는 현상
예외는 다양한 상황에 대해서 발생하는 현상으로 모든 예외를 대처할 수 없다.
다만, 예외 처리는 예외가 발생한 경우 프로그램이 종료되지 않고 사용자에게 선택권 또는 처리기회를 주는 것을 말한다.
즉, 예외처리 ➡ 예외가 발생한 경우 프로그램이 강제 종료되지 않도록 방지하는 것
e.getMessage( )
: 에러 발생시 출력되는 내용 중에서 메시지 부분만 가져오기
예) /by zero
e.printStackTrace( )
: 에러 내용 전부 출력 (에러 종류, 이유 메시지, 위치 등등)
어떤 명령 그리고 메서드는 에러 발생의 요인을 쉽게 예상할 수 없지만,
어떤 명령과 메서드는 쉽게 예상이 가능하기도 하다.
그런 상황에서 만들어진 메서드는 위와 같이 예외 처리 요소를 품고 있다가, 사용하게 되면 개발자에게 예외 처리를 권유한다.
권유받은 개발자는 위와 같이 try catch구문을 사용하거나,
현재 코드를 사용하는 상위 메서드에게 처리를 일임하는 것
(add throw declaration) 중 하나를 선택하여 처리한다.
숫자 입력 에러 처리
수업에서는 Integer.parseInt()를 사용했는데 Integer를 사용하고 실수를 입력하면, 실수는 입력되지 않고 에러가 발생했다.
Double.parseDouble()을 써보니 정수, 실수 전부 에러 없이 입력되어서 Double.parseDouble을 사용해 작성해보았다.
자바에서 윈도우 GUI에서 사용하는 애플리케이션을 만들 때, 사용하는 클래스이다. 윈도우와 관련된 클래스 대부분이 Swing클래스에 있다고 보면됨
그러나 C#이나 .net이 훨씬 더 좋고 편하기 때문에 (마이크로소프트에서 만든 거니까) 자바로는 잘 만들지 않는다.
JFrame : 윈도우 프로그래밍에 필요한 윈도우 구성요소를 보유한 클래스(JFrame)을 상속받아 추가기능 탑재 형식의 개발을 진행한다.
윈도우 최초 화면의 구성은 대부분 생성자 메서드에서 구성한다.
JButton 변수명 = new JButton(String);
생성자에 입력된 텍스트를(소괄호 안의 텍스트) 한가운데 표시한 버튼을 생성한다.
아직 화면에 버튼이 보이는 상태는 아니고, 생성만 한 상태 (배치X)
버튼 또는 그 외 컨트롤들은 윈도우에 배치되고 위치를 잡아 올라가고, 윈도우가 화면에 보여질 때 같이 표시된다.
JLabel : 라벨, 이름표, 명찰 등의 역할을 하는 안내 문구 표시용 텍스 도구
Container
: 윈도우 위에 생성된 컨트롤객체를 올려놓을 수 있게 해주는 객체.
싱글톤으로 작성되어있어 new로 새 객체를 생성하지 못하고 getContentPane() 메서드를 사용해야 한다.
정렬기준도 Container를 사용해서 정한다.
컨테이너 객체.add(컨트롤); 을 사용해서 컨테이너에 생성된 컨트롤들을 순서에 맞춰 올려 놓으년 화면에 표시될 준비 완료된다. (작성 순서대로 올라감)
컨테이너객체.setLayout(FlowLayout());
: 컨테이너에 올라간 컨트롤들을 정렬시키는 메서드, 정해주지 않으면 작성 순서대로 겹쳐져서 마지막 컨트롤만 보이게 된다.
정렬하는 법은 소괄호에 넣는데 자세한 내용은 아래 예제들로 하나씩 나옴
FlowLayout()
: 컨테이너에 올라가는 순서대로 일직선상에 위치시키는 레이아웃
윈도우 세팅
setTitle("윈도우 타이틀");
: 윈도우 좌착 상단에 표시된 타이틀 내용 설정
setSize(300,200);
: 윈도우 크기 설정, 단위(픽셀)
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
: 현재 윈도우 종료시 프로그램까지 종료
setVisible(true);
: 화면에 윈도우 출현시키는 메서드, 실행시키면 창이 바로 켜지게
ActionListenr
: 인터페이스, implements로 구현해서 사용한다.
반드시 오버라이딩할 메서드 actionPerformed()가 존재한다.
JS에서의 이벤트리스너와 비슷하다.
사용 순서
ActionListener를 implements 한다.
적용할 컨트롤에 addActionListner 메서드로 감시설정을 한다.
해당 컨트롤에 이벤트가 발생하면 호출된 ActionPerformed 메서드를 오버라이드 한다.
e.getActionCommand();
: 이벤트가 발생한 객체(e), 컨트롤의 표시된 값을 리턴
이미지파일을 불러와서 자바 Swing화면에 표시하려면, 이미지파일을 아이콘 형태로 변환하여 사용해야 한다.
ImageIcon 사용하기
: ImageIcon 객체명 = new ImageIcon("images/파일이름.확장자");
images 폴더는 src와 "같은 폴더"에 있어야 한다!! (즉, src 밖에!!!)
이미지
: apple.jpg / persimmon.jpg / pear.jpg / banan.jpg / cherry.jpg
다섯 개의 이미지를 아이콘으로 만들고, 버튼 다섯 개를 이미지와 함께 생성하기
그리드 레이아웃을 이용하여 3행 2열로 배치하고,
액션 리스너를 붙여서 버튼 클릭 시에 이미지에 해당하는 과일 이름이 result 라벨이 나오도록 작성
라벨이 화면에 메시지는 표시하지만 수정은 할 수 없는 안내문구만 가능하다면,
텍스트 필드는 피어있는 곳에 글자를 써 넣는 것이 가능하고, 쓰여진 글자들을 수정할 수도 있다.
텍스트필드객체.getText();
: 텍스트필드에 쓰여진 String을 가져오는 메서드
윈도우에 텍스트 필드1, 버튼1, 버튼2, 텍스트필드2 순서로 표시
버튼1 표면에는 ">" 글자표시, 버튼2의 표면에는 "<"글자를 표시
버튼1을 클릭하면 텍스트필드1의 글자가 텍스트필드2로 옮겨지게 하고,
버튼2을 클릭하면 텍스트필드2의 글자가 텍스트필드1로 옮겨지게 할 것
글자가 없는 상태에서 버튼을 클릭하면 아무 일도 일어나지 않게 하기
윈도우 클래스 이름은 TextFieldEx로, 윈도우 가로 세로 크기는 적절히 조절
수업이 거의 끝날 때쯤 문제를 받아서 수업 끝날 때까지 작성했음..
집에와서 actionPerformed()를 조금 수정했는데 실행은 되는 듯한데
잘 했는지 모르겠다.
어쨌든 혼자 적어보았고 내일 수업을 들으면서 수정할 것이 있으면 수정하고 공부할 것!!