문제와 해답은 직접 작성한 것으로 오타가 있을 수도 있으며 해답역시 틀린 부분이 있을 수 있습니다. 틀린 부분에 대한 지적은 적극 수용하도록 하겠습니다. 문제를 먼저 풀어보시고 참고용으로만 봐주시길
바랍니다.
연습문제 9장
1. 자바의 이벤트 기반 프로그래밍에 대한 설명으로 틀린 것을 골라라.
① AWT나 스윙 응용프로그램은 이벤트 기반 프로그램이다.
② 이벤트 기반 프로그램에는 이벤트 분배 스레드가 존재한다.
③
이벤트 리스너를 가진 컴포넌트만 이벤트를 처리할 수 있다
④ 이벤트 리스너는 클래스로 작성하되 반드시 별도의 자바 파일로 작성해야
한다.
책을 조금이라도 봤다면 느작없는 소리라는 것을 알 수 있다.
2. Mouse 이벤트가 발생하면 MouseEvent 객체가 생성된다. MouseEvent 객체가 가지고 있는 정보에 해당하지 않는 것은 무엇인가?
① 이벤트 소스
②
마우스 드래깅 길이
③ 마우스 버튼 번호
④ 마우스 클릭 좌표
드래깅 길이는 좌표를 받아서
따로 계산해야 한다.
3. 다음 코드를 익명 클래스를 이용하여 다시 작성하라.
JButton btn = new JButton("Hello");
btn.addActionListener(new MyActionListener());
class MyActionListener() implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("Click");
}
}
위 소스코드를 다음과 같이 변경
JButton btn = new JButton("Hello");
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Click");
}
});
4. 다음 코드를 익명 클래스를 이용하여 다시 작성하라.
JButton btn = enw JButton("Hello");
btn.addKeyListener(new MyKeyListener());
class MyKeyListener extends KeyAdapter {
public void keyReleased(KeyEvent e) {
System.out.println("Key Released");
}
}
위 소스코드를 다음과 같이 변경
JButton btn = enw JButton("Hello");
btn.addKeyListener(new KeyListener() {
public void keyReleased(KeyEvent e) {
System.out.println("Key Released");
}
});
5. 다음 코드에서 틀린 부분을 수정하라.
class MyActionListener extends ActionAdapter {
public void actionPerformed(ActionEvent e) {
System.out.println("Click");
}
}
1행 : class MyActionListener implements ActionListener {
6. 다음 각 항목의 코드에서 틀린 부분을 수정하라.
(1)
class MyMouseListener implemets MouseListener {
public void mousePressed(MouseEvent e) {
System.out.println("Mouse Pressed");
}
}
1행 : class MyMouseListener extends MouseAdapter {
(2)
class MyKeyListener extends KeyAdapter {
public void keyTyped(ActionEvent e) {
System.out.println("Key Typed");
}
}
2행 : public void keyTyped(KeyEvent e) {
7. 다음 중에서 유니코드 키가 아닌 것을 모두 골라라.
a, <Alt>, 9, %, <Tab>,
@, <Delete>, ;, <Shift>,
~, <Help>
8. 사용자가 <Esc> 키를 입력할 때 KeyListener의 keyPressed(), keyReleased(), keyTyped() 메소드가 호출되는 순서는?
호출되는 순서는 keyPressed(), keyReleased()이며, keyTyped()는 호출되지 않는다.
9. JLabel la = new JLabel("Hello");에서 레이블 la를 마우스로 클릭하면 la의 글자를 "안녕"으로 바꾸고자 한다. 다음 코드를 완성하라.
la.__________ // la에 마우스 리스너를 등록한다.
...
class MyMouseListener extends __________ { // 마우스 리스너를 선언한다.
public void __________ { // 눌러진 마우스가 놓이는 순간 처리
JLabel label = __________ // 이벤트 소스를 알아낸다.
label.__________ // 문자열을 "안녕"으로 변경한다.
}
}
1행 : addMouseListener(new MyMouseListener());
3행 : MouseAdapter
4행 : mouseReleased(MouseEvent e)
5행 : (JLabel)e.getSource();
6행 : setText("안녕");
10. 키 입력을 받기 위해 작성된 다음 keyPressed() 메소드 안의 빈칸을 적절히 채워라.
public void keyPressed(KeyEvent e) {
if(__________ == __________) // Delete키가 눌러진 경우
System.out.println("Delete");
else if(__________ == '#') // #키가 눌러진 경우
System.out.println("#");
}
2행 : e.getKeyCode(), keyEvent.VK_DELETE
4행 : e.getKeyChar()
11. 컴포넌트가 키보드 이벤트를 받을 수 있기 위해서는 포커스를 가지고 있어야 한다. 컴포넌트 c에 포커스를 주는 코드는 다음 중 무엇인가?
① c.focus();
②
c.getFocus();
③ c.requestFocus();
④ c.setFocus();
Ghost