문제와 해답은 직접 작성한 것으로 오타가 있을 수도 있으며 해답역시 틀린 부분이 있을 수 있습니다. 틀린 부분에 대한 지적은 적극 수용하도록 하겠습니다. 문제를 먼저 풀어보시고 참고용으로만 봐주시길 바랍니다.



연습문제 9장

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


2. Mouse 이벤트가 발생하면 MouseEvent 객체가 생성된다. MouseEvent 객체가 가지고 있는 정보에 해당하지 않는 것은 무엇인가?
① 이벤트 소스
② 마우스 드래깅 길이
③ 마우스 버튼 번호
④ 마우스 클릭 좌표
드래깅 길이는 좌표를 받아서 따로 계산해야 한다.


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

1
2
3
4
5
6
7
JButton btn = new JButton("Hello");
btn.addActionListener(new MyActionListener());
class MyActionListener() implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Click");
    }
}

위 소스코드를 다음과 같이 변경

1
2
3
4
5
6
JButton btn = new JButton("Hello");
btn.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Click");
    }
});


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

1
2
3
4
5
6
7
JButton btn = enw JButton("Hello");
btn.addKeyListener(new MyKeyListener());
class MyKeyListener extends KeyAdapter {
    public void keyReleased(KeyEvent e) {
        System.out.println("Key Released");
    }
}

위 소스코드를 다음과 같이 변경

1
2
3
4
5
6
JButton btn = enw JButton("Hello");
btn.addKeyListener(new KeyListener() {
    public void keyReleased(KeyEvent e) {
        System.out.println("Key Released");
    }
});


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

1
2
3
4
5
class MyActionListener extends ActionAdapter {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Click");
    }
}

1행 : class MyActionListener implements ActionListener { 


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

(1)

1
2
3
4
5
class MyMouseListener implemets MouseListener {
    public void mousePressed(MouseEvent e) {
        System.out.println("Mouse Pressed");
    }
}

1행 :  class MyMouseListener extends MouseAdapter {

(2)

1
2
3
4
5
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의 글자를 "안녕"으로 바꾸고자 한다. 다음 코드를 완성하라.

1
2
3
4
5
6
7
8
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() 메소드 안의 빈칸을 적절히 채워라.

1
2
3
4
5
6
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();


WRITTEN BY

배진오

하고싶은 건 다 하면서 사는게 목표
im@baejino.com

comments powered by Disqus