2021. 12. 20. 18:01ㆍSolution`/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() : 컨테이너의 배치관리자에게 다시 배치를 지시하는 것