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

- Author: @baealex
- Published: 2018-11-23
- Updated: 2018-11-23
- 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-11%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>

#### 연습문제 11장

1. 모든 스윙 컴포넌트가 오버라이딩하여 가지고 잇는 것으로 자신의 모양을 그리는 메소드는 무엇인가? 그리고 원레 이 메소드는 어떤 클래스에 있는 메소드인지 말하라. 
 ①
 printComponent(Graphics g) 
 ② paintContent(Graphics g) 
 <span style="color: rgb(255, 0, 0);">③
 paintComponent(Graphics g)</span> 
 ④ repaint() 
 <span style="color: rgb(47, 157, 39);">JComponent의 추상
 메소드</span>

2. 스윙 패키지에서 지원되며 빈 캔버스와 같이 아무 모양이 없는 컨테이너로서 개발자가 그래픽을 통해 다양한 사용자 인터페이스를 그리고자 할 때 사용하는 클래스는? 
 <span style="color: rgb(255, 0, 0);">①
 JPanel</span> 
 ② JFrame 
 ③ JDialog 
 ④ JCanvas

3. Graphics 클래스의 기능이 아닌 것은? 
 ① 이미지 축소하여 그리기 
 ② 폐다각형 그리기 
 ③ 클리핑 
 <span style="color: rgb(255, 0, 0);">④
 애니메이션</span>

4. 다음 설명 중 틀린 것은? 
 ① JComponent를 상속받아 개발자는 자신만의 새로운 컴포넌트를 제작할 수 있다. 
 ② Graphics는 java.awt 패키지에 속한 클래스이다. 
 <span style="color: rgb(255, 0, 0);">③ Graphics로 선을 그릴 때 선의 두께를 마음대로 조절할 수 있다.</span> 
 ④ Graphics로 다각형을 칠할 때 외곽선과
 내부의 색을 다르게 줄 수 없다.

5. 아래와 같은 MyPanel 패널 클래스가 있을 때, 다음 각 요청에 따라 그림을 그리는 코드를 작성하라.

```java
class MyPanel extends JPanel {
    Image img = new ImageIcon("test.jpg").getImage();
    public void paintComponent(Graphics g) {
        super.paintcomponent(g);
        ____________________
    }
}
```

(1) 이미지를 원본 크기로 (10, 20) 위치에 그리는 코드를 작성하라. 
 <span style="color: rgb(47, 157, 39);">g.drawImage(img, 10, 20,
 this);</span>

(2) 패널 안에 상, 하, 좌, 우 10픽셀씩 여백을 두고 그 안에 이미지가 모두 보이도록 그리는 코드를 작성하라. 
 <span style="color: rgb(47, 157, 39);">g.drawImage(img,
 10, 10, getWidth()-20, getHeight()-20, </span> <span style="color: rgb(47, 157, 39);">this</span> <span style="color: rgb(47, 157, 39);">);</span>

6. 아래와 같은 MyPanel 패널 클래스가 있을 대, 다음 각 요청에 따라 그림을 그리는 코드를 한 줄 혹은 두 줄로 작성하라.

```java
class Mypanel extends JPanel {
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        ____________________
        ____________________
    }
}
```

(1) 패널의 (100, 100)에 30픽셀의 Times New Roman체로 "We win!!"을 출력하라. 
 <span style="color: rgb(47, 157, 39);">g.setFont(new
 Font("Times New Roman", Font.PLAIN, 30));</span> 
 <span style="color: rgb(47, 157, 39);">g.drawString("We
 Win!!", 100, 100);</span>

(2) 패널에 꽉 차는 파란색의 타원을 그려라. 패널 크기와 함께 타원의 크기도 변한다. 
 <span style="color: rgb(47, 157, 39);">g.setColor(Color.BLUE);</span> 
 <span style="color: rgb(47, 157, 39);">g.drawOval(0, 0, getWidth(),</span> <span style="color: rgb(47, 157, 39);"> getHeight(</span> <span style="color: rgb(47, 157, 39);">));</span>

7. 자바로 GUI를 구성할 때 JButton, JRadioButton 등 컴포넌트를 이용하거나 또는 그래픽을 이용할 수 있다. 그래픽을 이용하는 장점은 무엇인가? 
 <span style="color: rgb(47, 157, 39);">개발자가
 원하는 독창적이고 창의적인 GUI를 구현할 수 있다.</span>

8. 컴포넌트의 paintComponent()를 응용프로그램에서 직접 호출하면 안 된다. 컴포넌트의 paintComponet()가 실행되도록 응용프로그램에서 간접적으로 할 수 있는 방법은? 
 <span style="color: rgb(47, 157, 39);">repaint()를 호출한다.</span>

9. 다음 코드를 참고하여 super.paintComponent(g)의 기능과 호출 이유를 설명하라.

```java
import java.awt.*;
import javax.swing.*;
public class paintComp extends JFrame {
    public paintComp() {
        MyPanel p = new MyPanel(); // 패널 생성
        setContentPane(p); // 패널을 컨텐트팬으로 설정
        p.setBackground(Color.YELLOW);
        setSize(300, 300);
        setVisible(true);
    }
    class MyPanel extends JPanel {
        public void paintComponent(Graphics g) {
            super.paintComponet(g); // 이 코드의 기능과 호출 이유를 설명하라.
            g.drawString("Why", 100, 100); // (100, 100)에 Why 출력
        }
    }
    public static void main(String[] args) { new paintComp(); }
}
```

<span style="color: rgb(47, 157, 39);">기존의 모든 내용을 지우고 </span> <span style="color: rgb(47, 157, 39);">컨포넌트를 상속받아
 프로그래머가 원하는 컨포넌트를 그린다.</span>
