문제와 해답은 직접 작성한 것으로 오타가 있을 수도 있으며 해답역시 틀린 부분이 있을 수 있습니다. 틀린 부분에 대한 지적은 적극 수용하도록 하겠습니다. 문제를 먼저 풀어보시고 참고용으로만 봐주시길
바랍니다.
연습문제 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(); }
}
기존의 모든 내용을 지우고 컨포넌트를 상속받아 프로그래머가 원하는 컨포넌트를 그린다.
Ghost