'명품 자바 에센셜 풀이' 시리즈명품 자바 에센셜 연습문제 9장(이론)

baealex

소비적인 일보단 생산적인 일을 좋아합니다.

Sign in to view email


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



연습문제 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();


작성된 댓글이 없습니다!
로그인된 사용자만 댓글을 작성할 수 있습니다.