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

baealex

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

Sign in to view email


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



연습문제 11장

1. 모든 스윙 컴포넌트가 오버라이딩하여 가지고 잇는 것으로 자신의 모양을 그리는 메소드는 무엇인가? 그리고 원레 이 메소드는 어떤 클래스에 있는 메소드인지 말하라.
① printComponent(Graphics g)
② paintContent(Graphics g)
③ paintComponent(Graphics g)
④ repaint()
JComponent의 추상 메소드


2. 스윙 패키지에서 지원되며 빈 캔버스와 같이 아무 모양이 없는 컨테이너로서 개발자가 그래픽을 통해 다양한 사용자 인터페이스를 그리고자 할 때 사용하는 클래스는?
① JPanel
② JFrame
③ JDialog
④ JCanvas


3. Graphics 클래스의 기능이 아닌 것은?
① 이미지 축소하여 그리기
② 폐다각형 그리기
③ 클리핑
④ 애니메이션


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


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

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

(1) 이미지를 원본 크기로 (10, 20) 위치에 그리는 코드를 작성하라.
g.drawImage(img, 10, 20, this);

(2) 패널 안에 상, 하, 좌, 우 10픽셀씩 여백을 두고 그 안에 이미지가 모두 보이도록 그리는 코드를 작성하라.
g.drawImage(img, 10, 10, getWidth()-20, getHeight()-20, this);


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

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

(1) 패널의 (100, 100)에 30픽셀의 Times New Roman체로 "We win!!"을 출력하라.
g.setFont(new Font("Times New Roman", Font.PLAIN, 30));
g.drawString("We Win!!", 100, 100);

(2) 패널에 꽉 차는 파란색의 타원을 그려라. 패널 크기와 함께 타원의 크기도 변한다.
g.setColor(Color.BLUE);
g.drawOval(0, 0, getWidth(), getHeight());


7. 자바로 GUI를 구성할 때 JButton, JRadioButton 등 컴포넌트를 이용하거나 또는 그래픽을 이용할 수 있다. 그래픽을 이용하는 장점은 무엇인가?
개발자가 원하는 독창적이고 창의적인 GUI를 구현할 수 있다.


8. 컴포넌트의 paintComponent()를 응용프로그램에서 직접 호출하면 안 된다. 컴포넌트의 paintComponet()가 실행되도록 응용프로그램에서 간접적으로 할 수 있는 방법은?
repaint()를 호출한다.


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

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(); }
}

기존의 모든 내용을 지우고 컨포넌트를 상속받아 프로그래머가 원하는 컨포넌트를 그린다.



'명품 자바 에센셜 풀이' 시리즈
문제와 해답은 직접 작성한 것으로 오타가 있을 수도 있으며 해답역시 틀린 부분이 있을 수 있습니다. 틀린 부분에 대한 지적은 적극 수용하도록 하겠습니다. 문제를 먼저 풀어보시고 참고용으로만 봐주시길 바랍니다.
작성된 댓글이 없습니다!
로그인된 사용자만 댓글을 작성할 수 있습니다.