-> 블로그 이전

[명품 Java] 10장 연습문제 (자바의 이벤트 처리)

2021. 12. 20. 18:01Solution`/Java

[10장 1번]

자바의 이벤트 기반 프로그래밍에 대한 설명으로 틀린 것은?

1. 이벤트 분배 스레드가 존재한다

2. AWT나 스윙 응용프로그램은 이벤트 기반 응용프로그램이다

3. 키 이벤트를 처리하는 도중 마우스 이벤트가 발생하면, 마우스 이벤트를 처리한 뒤 중단시킨 키 이벤트 처리를 계속 한다

4. 컴포넌트마다 처리할 수 있는 이벤트가 서로 다르다

 

 

[10장 2번]

MouseEvent 객체가 제공하지 않는 정보는 무엇인가?

1. 이벤트 소스

2. 마우스 클릭된 화면 좌표

3. 클릭된 마우스 버튼 번호

4. 마우스 드래깅 길이

 

 

[10장 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() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("Click");
            }
        }

 

 

[10장 4번]

다음 프로그램 코드를 익명 클래스를 이용하여 다시 작성하라

JButton btn = new JButton("Hello");
btn.addKeyListener(new MyKeyListener());

class MyKeyListener implements KeyAdapter{
    public void KeyReleased(KeyEvent e){
        System.out.println("Key Released");
    }
}

>> 풀이

JButton btn = new JButton("Hello");
        btn.addKeyListener(new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent e) {
                System.out.println("Key Released");
            }
        });

 

 

[10장 5번]

다음 프로그램에서 틀린 부분을 찾아 수정하라

(1)

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

- extends ActionAdapter → implements ActionListener

 

(2)

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

- implements MouseListener → extends MouseAdapter

 

(3)

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

- ActionEvent → KeyEvent

 

 

[10장 6번]

다음 Action 이벤트 리스너 코드가 있다

class MyActionListener implements ActionListener{
    private String msg;
    public MyActionListener(String ms) { this.msg = msg; }
    public void actionPerformed(ActionEvent e) { System.out.println(msg); }
}

"Hello" 버튼에 다음과 같이 리스너를 등록하고, 버튼을 클릭하면 실행 결과는 무엇인가?

JButton btn = new JButton("Hello");
btn.addActionListener(new MyActionListener("1"));
btn.addActionListener(new MyActionListener("2"));
btn.addActionListener(new MyActionListener("3"));

3

2

1

- 리스너는 등록된 반대순으로 실행된다

 

 

[10장 7번]

다음 중 어댑터 클래스를 가지지 않는 리스너는 무엇인가?

1. ItemListener

2. KeyListener

3. FocusListener

4. WindowListener

 

 

[10장 8번]

component가 포커스를 가지고 있어야 키 이벤트를 처리할 수 있다. component에 포커스를 강제로 설정하는 코드는 무엇인가?

1. component.setFocus();

2. component.focusRequest();

3. component.requestFocus();

4. component.focus();

 

 

[10장 9번]

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

a, <Alt>, 9, %, <Tab>, @, <Delete>, ;, <Shift>, ~, <Help>

- <Alt>, <Tab>, <Delete>, <Shift>, <Help>

 

 

[10장 10번]

다음 코드가 a 키가 눌러졌는지 판별하기 위한 처리 코드이다

public void KeyPressed(KeyEvent e){
    if(e.getKeyChar() == __________){
        System.exit(0);
    }
}

(1) 빈 칸을 채워라

- 'a'

 

(2) 2번째 라인을 <ALT> 키가 눌러졌는지 판별하는 코드로 수정하라

- e.getKeyCode == VK_ALT

 

 

[10장 11번]

키 이벤트가 발생할 때 KeyListener의 KeyPressed(), KeyReleased(), KeyTyped() 메소드가 호출되는 순서에 대해 답하라

(1) 사용자가 a 키를 입력할 때

- KeyPressed() → KeyTyped() → KeyReleased()

 

(2) 사용자가 <Esc> 키를 입력할 때

- KeyPressed() → KeyReleased()

 

 

[10장 12번]

다음 마우스 리스너가 있다.

class MyMouseListener extends MouseAdapter{
    private int count = 0;
    public void mousePressed(MouseEvent e) { count++; }
    public void mouseReleased(MouseEvent e) { System.out.print(count); }
    public void mouseDragged(MouseEvent e) { count++; }
}

그리고 컨텐트팬에 다음과 같이 Mouse 리스너와 MouseMotion 리스너를 등록하였다

contentPane.addMouseListener(new MyMouseListener());
contentPane.addMouseMotionListener(new MyMouseListener());

 

(1) 컨텐트팬에 마우스를 한 번 누르고 놓았을 때 화면에 출력되는 내용은?

- 1

 

(2) 컨텐트팬에 마우스를 누른 후 드래그하고 마우스를 놓았을 때 출력되는 내용은? (그동안 mouseDragged()가 10번 실행되었다.)

- 12345678910

 

(3) 마우스 리스너 등록 코드를 다음과 같이 바꾸었을 때, (1), (2)번에 대한 결과는?

MyMouseListener ml = new MyMouseListener();
contentPane.addMouseListener(ml);
contentPane.addMouseMotionListener(ml);

(1) : 1

(2) :  13176113163206258305357401451

 

- (1), (2)는 서로 다른 객체로 생성을 했기 때문에 MouseListener과 MouseMotionListener에서 다루는 count가 서로 다른 변수인 것이다

 

- (3)은 하나의 객체를 생성해 그것을 MouseListener, MouseMotionListener로 부른 것이기 때문에 mousePressed, mouseReleased, mouseDragged 에 대해 같은 count 변수를 다룬다. 따라서 mouseDragged로 인해 급증한 count가 mouseReleased시에 출력된다

 

 

[10장 13번]

스윙 컴포넌트 component에 대해 다음 문장의 의미는 각각 무엇인가?

component.repaint();
component.revalidate();

- component.repaint() : 컴포넌트의 색 또는 모양 등이 바뀌었을 때 컴포넌트를 다시 출력하는 것

- component.revalidate() : 컨테이너의 배치관리자에게 다시 배치를 지시하는 것