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


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



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

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


이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.