# 명품 자바 에센셜 연습문제 9장(이론)

- Author: @baealex
- Published: 2018-11-20
- Updated: 2018-11-20
- Source: http://blex.me/@baealex/%EB%AA%85%ED%92%88-%EC%9E%90%EB%B0%94-%EC%97%90%EC%84%BC%EC%85%9C-%EC%97%B0%EC%8A%B5%EB%AC%B8%EC%A0%9C-9%EC%9E%A5%EC%9D%B4%EB%A1%A0
- Tags: 자바에센셜

---

<div class="txc-textbox" style="border-style: solid; border-width: 1px; border-color: rgb(254, 254, 184); background-color: rgb(254, 254, 184); padding: 10px;">
<p>문제와 해답은 직접 작성한 것으로 오타가 있을 수도 있으며 해답역시 틀린 부분이 있을 수 있습니다. 틀린 부분에 대한 지적은 적극 수용하도록 하겠습니다. 문제를 먼저 풀어보시고 참고용으로만 봐주시길
        바랍니다.<br/></p>
</div>

#### 연습문제 9장

1. 자바의 이벤트 기반 프로그래밍에 대한 설명으로 틀린 것을 골라라. 
 ① AWT나 스윙 응용프로그램은 이벤트 기반 프로그램이다. 
 ② 이벤트 기반 프로그램에는 이벤트 분배 스레드가 존재한다. 
 ③
 이벤트 리스너를 가진 컴포넌트만 이벤트를 처리할 수 있다 
 <span style="color: rgb(255, 0, 0);">④ 이벤트 리스너는 클래스로 작성하되 반드시 별도의 자바 파일로 작성해야
 한다.<br/><span style="color: rgb(47, 157, 39);">책을 조금이라도 봤다면 느작없는 소리라는 것을 알 수 있다.</span></span>

2. Mouse 이벤트가 발생하면 MouseEvent 객체가 생성된다. MouseEvent 객체가 가지고 있는 정보에 해당하지 않는 것은 무엇인가? 
 ① 이벤트 소스 
 <span style="color: rgb(255, 0, 0);">②
 마우스 드래깅 길이</span> 
 ③ 마우스 버튼 번호 
 ④ 마우스 클릭 좌표 
 <span style="color: rgb(47, 157, 39);">드래깅 길이는 좌표를 받아서
 따로 계산해야 한다.</span>

3. 다음 코드를 익명 클래스를 이용하여 다시 작성하라.

```java
JButton btn = new JButton("Hello");
btn.addActionListener(new MyActionListener());
class MyActionListener() implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Click");
    }
}
```

<span style="color: rgb(47, 157, 39);">위 소스코드를 다음과 같이 변경</span>

```java
JButton btn = new JButton("Hello");
btn.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Click");
    }
});
```

4. 다음 코드를 익명 클래스를 이용하여 다시 작성하라.

```java
JButton btn = enw JButton("Hello");
btn.addKeyListener(new MyKeyListener());
class MyKeyListener extends KeyAdapter {
    public void keyReleased(KeyEvent e) {
        System.out.println("Key Released");
    }
}
```

<span style="color: rgb(47, 157, 39);">위 소스코드를 다음과 같이 변경</span>

```java
JButton btn = enw JButton("Hello");
btn.addKeyListener(new KeyListener() {
    public void keyReleased(KeyEvent e) {
        System.out.println("Key Released");
    }
});
```

5. 다음 코드에서 틀린 부분을 수정하라.

```java
class MyActionListener extends ActionAdapter {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Click");
    }
}
```

<span style="color: rgb(47, 157, 39);">1행: class MyActionListener</span> <span style="color: rgb(47, 157, 39);"> imple</span> <span style="color: rgb(47, 157, 39);">ments ActionListener {</span> <span style="color: rgb(47, 157, 39);"> </span>

6. 다음 각 항목의 코드에서 틀린 부분을 수정하라.

(1)

```java
class MyMouseListener implemets MouseListener {
    public void mousePressed(MouseEvent e) {
        System.out.println("Mouse Pressed");
    }
}
```

<span style="color: rgb(47, 157, 39);">1행: </span> <font color="#2f9d27">class MyMouseListener extends MouseAdapter {</font>

(2)

```java
class MyKeyListener extends KeyAdapter {
    public void keyTyped(ActionEvent e) {
        System.out.println("Key Typed");
    }
}
```

<span style="color: rgb(47, 157, 39);">2행: </span> <font color="#2f9d27">public void keyTyped(KeyEvent e) {</font>

7. 다음 중에서 유니코드 키가 아닌 것을 모두 골라라.

<div class="txc-textbox" style="border-style: solid; border-width: 1px; border-color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); padding: 10px;">
<p>a, <span style="color: rgb(255, 0, 0);">&lt;Alt&gt;</span>, 9, %, <span style="color: rgb(255, 0, 0);">&lt;Tab&gt;</span>,
        @, <span style="color: rgb(255, 0, 0);">&lt;Delete&gt;</span>, ;, <span style="color: rgb(255, 0, 0);">&lt;Shift&gt;</span>,
        ~, <span style="color: rgb(255, 0, 0);">&lt;Help&gt;</span><br/></p>
</div>

8. 사용자가 <Esc> 키를 입력할 때 KeyListener의 keyPressed(), keyReleased(), keyTyped() 메소드가 호출되는 순서는?

<font color="#2f9d27">호출되는 순서는 keyPressed(), keyReleased()이며, keyTyped()는 호출되지 않는다.</font>

9. JLabel la = new JLabel("Hello");에서 레이블 la를 마우스로 클릭하면 la의 글자를 "안녕"으로 바꾸고자 한다. 다음 코드를 완성하라.

```java
la.__________ // la에 마우스 리스너를 등록한다.
...
class MyMouseListener extends __________ { // 마우스 리스너를 선언한다.
    public void __________ { // 눌러진 마우스가 놓이는 순간 처리
        JLabel label = __________ // 이벤트 소스를 알아낸다.
        label.__________ // 문자열을 "안녕"으로 변경한다.
    }
}
```

<span style="color: rgb(47, 157, 39);">1행: addMouseListener(new MyMouseListener());</span> <font color="#2f9d27"><br/></font> <span style="color: rgb(47, 157, 39);">3행: MouseAdapter</span> <font color="#2f9d27"><br/></font> <span style="color: rgb(47, 157, 39);">4행: mouseReleased(MouseEvent e)</span> <font color="#2f9d27"><br/></font> <span style="color: rgb(47, 157, 39);">5행: (JLabel)e.getSource();</span> <font color="#2f9d27"><br/></font> <span style="color: rgb(47, 157, 39);">6행: setText("안녕");</span>

10. 키 입력을 받기 위해 작성된 다음 keyPressed() 메소드 안의 빈칸을 적절히 채워라.

```java
public void keyPressed(KeyEvent e) {
    if(__________ == __________) // Delete키가 눌러진 경우
        System.out.println("Delete");
    else if(__________ == '#') // #키가 눌러진 경우
        System.out.println("#");
}
```

<span style="color: rgb(47, 157, 39);">2행: e.getKeyCode(), keyEvent.VK_DELETE</span> <font color="#2f9d27"><br/></font> <span style="color: rgb(47, 157, 39);">4행: e.getKeyChar()</span>

11. 컴포넌트가 키보드 이벤트를 받을 수 있기 위해서는 포커스를 가지고 있어야 한다. 컴포넌트 c에 포커스를 주는 코드는 다음 중 무엇인가? 
 ① c.focus(); 
 ②
 c.getFocus(); 
 <span style="color: rgb(255, 0, 0);">③ c.requestFocus();</span> 
 ④ c.setFocus();
