Java 기말고사 범위의 6번째, Windows Programming에 대해 정리해보았다. 각종 이벤트들과 컴포넌트들에 대해 알아본다.
1. 이벤트
무슨 일이 생겼는지를 담고 있는 객체이다. 가령 마우스가 클릭되었을 때, 키보드가 눌렸을 때 어떤 키가 눌렸고 커서 위치는 어디고 등등을 담고 있는 것이다. java에서는 이를 ActionEvent
라고 한다.
1.1 ActionEvent
ActionEvent 객체는 다음과 같은 메서드를 포함한다.
String getActionCommand()
: 이벤트가 발생한 컴포넌트의 텍스트를 반환한다.
getModifiers()
: 이벤트가 발생한 컴포넌트의 키보드 모드를 반환한다.
1.2 이벤트 핸들러
이벤트 핸들러는 이벤트 객체를 받아서 해독하고 처리하는 역할을 한다.
이벤트는 그걸 받은 컴포넌트에 전달되는데 컴포넌트는 이벤트를 처리할 수 있는 이벤트 핸들러를 담은 객체인 이벤트 리스너를 가지고 있다. 이벤트를 리스너로 전달하는 것은 컴포넌트 단에서 처리하도록 코드를 짠다.
예를 들어서 이벤트 리스너는 다음과 같이 작성할 수 있다. actionPerformed 외에도 MouseListener와 mousePressed 등 다양한 이벤트 리스너와 그 메소드들이 있다. 그 이벤트 리스너 추상 클래스들을 구현하는 식으로 핸들러를 만든다.
그리고 이 이벤트 리스너를 컴포넌트에 등록하는 것은 addActionListener 메서드를 사용한다.
버튼에 이벤트 리스너를 추가함으로써 클릭 이벤트를 처리할 수 있도록 한 것이다.
1.3 다중 이벤트 핸들러
하나의 컴포넌트에 여러 이벤트 핸들러를 다는 것도 가능하다. 서로 다른 이벤트에 대한 핸들러는 다른 add listener 메서드를 사용하기 때문이다.
이때 implements한 추상 베이스 클래스의 메서드를 모두 정의해 줘야 됨에 주의.
2. AWT 컴포넌트
ActionListener의 actionPerformed를 사용하였다.
2.2 Checkbox
생성자는 5가지가 있다.
ItemListener의 itemStateChanged를 사용할 수 있다. itemStateChanged는 체크박스의 상태가 변경될 때 호출된다.
다음 코드에선 One, Two, Three 라벨이 붙은 체크박스 3개를 생성하고 그 상태가 바뀔 때마다 그 상태를 출력한다.
CheckboxGroup도 new CheckboxGroup()
로 생성할 수 있다. 이때 Checkbox의 생성자에 CheckboxGroup을 넣어주면 그 그룹에 속하게 된다.
2.3 Choice
Choice는 여러가지 중에 하나를 선택하는 드롭다운 메뉴를 만들 수 있다.
Choice는 ItemListener의 itemStateChanged를 사용할 수 있다. itemStateChanged는 Choice의 상태가 변경될 때 호출된다.
2.4 Canvas
Canvas는 그림을 그릴 수 있는 컴포넌트이다. Canvas는 paint() 메소드를 오버라이드하여 그림을 그릴 수 있다.
다음 예제는 KeyListener의 keyTyped를 사용하여 키보드를 누를 때마다 캔버스 색이 바뀌는 프로그램이다.
2.5 TextArea
TextArea는 여러 줄의 텍스트를 입력할 수 있는 컴포넌트이다. 다음과 같은 생성자를 가진다.
TextListener의 textValueChanged를 사용할 수 있다. textValueChanged는 TextArea의 텍스트가 변경될 때 호출된다.
2.6 TextField
한 줄의 텍스트를 입력할 수 있는 컴포넌트이다. 다음과 같은 생성자를 가진다.
TextListener의 textValueChanged를 사용할 수 있다. textValueChanged는 TextField의 텍스트가 변경될 때 호출된다.
또한 키 입력을 받기 위해 KeyListener가 아니라 이를 구현한 클래스인 KeyAdapter를 사용할 수 있다.
2.7 List
List는 여러 개의 항목을 선택할 수 있는 컴포넌트이다. 여러 개의 요소들을 스크롤하면서 하나 혹은 여러 요소를 선택할 수 있다.
다음과 같이 사용한다.
2.8 Dialog
Dialog는 다른 컴포넌트 위에 떠있는 컴포넌트이다. Dialog는 Frame의 메소드를 사용하여 생성할 수 있다.
또한 다이얼로그가 소속된 프레임이나 다른 다이얼로그의 상태에 따라 사용자에게 보이는지 여부가 변한다. 다이얼로그가 속한 프레임이 닫힌 상태라면 다이얼로그도 보이지 않게 된다.
WindowListener의 windowOpened, windowClosing, windowClosed, windowActivated, windowDeactivated등의 이벤트 메서드를 사용할 수 있다.
생성자는 다음과 같다.
또한 dispose 메서드를 사용하여 다이얼로그를 닫을 수 있고 ActionListener의 actionPerformed를 사용하여 다이얼로그의 버튼을 눌렀을 때의 이벤트를 처리할 수 있다.
2.9 FileDialog
FileDialog는 파일을 선택할 수 있는 다이얼로그이다. 생성자는 다음과 같다.
모드는 다음과 같다. FileDialog.LOAD는 파일을 불러오는 모드이고 FileDialog.SAVE는 파일을 저장하는 모드이다.
메뉴바 -> 메뉴 -> 메뉴아이템.
메뉴바는 Frame의 setMenuBar를 사용하여 추가할 수 있다.
또 CheckboxMenuItem을 사용하여 체크박스도 메뉴에 넣을 수 있다.