-> 블로그 이전

[명품 Java] 9장 연습문제 (자바 GUI 기초 / AWT와 스윙)

2021. 12. 19. 19:23Solution`/Java

[9장 1번]

자바에서는 AWT 컴포넌트와 스윙 컴포넌트를 제공한다. 이들 중 어떤 것이 경량 컴포넌트이고, 어떤 것이 중량 컴포넌트인가? 그리고 차이점은?

- awt 컴포넌트가 중량 컴포넌트이고, swing 컴포넌트가 경량 컴포넌트이다.

 

- awt는 해당 운영체제의 gui를 빌려 쓰는거라서 운영체제에 따라 배치나 모양이 다르고 속도가 빠르다. 하지만 운영체제에 따라 버그가 발생한다

 

- swing은 운영체제의 자원을 빌리지 않고, 직접 화면에 그려서 운영체제간에 버그를 해결한다. 자바언어로만 구성되어 있고 속도가 느리다

 

 

[9장 2번]

데스크톱에서 실행되는 GUI 응용프로그램 작성 시 AWT보다 스윙 사용을 권장하는 이유는?

- swing은 운영체제와 관계없이 항상 동일하게 작동하고, 동일한 모양으로 나타나고, awt보다 나중에 개발되어서 더 다양하고 모양도 화려하다. 그리고 컴포넌트 코드들을 전부 자바로 구성해서 안전하다

 

 

[9장 3번]

다음 중 스윙컴포넌트가 아닌 것은?

1. JPanel

2. JTextField 

3. JLabel

4. Button

 

 

[9장 4번]

다음 중 컴포넌트는?

1. JFrame

2. Font

3. Color

4. Graphics

 

 

[9장 5번]

컴포넌트와 컨테이너에 대해 잘못 말한 것은?

1. 컨테이너는 컴포넌트를 담을 수 있는 컴포넌트이다.
2. JPanel은 컨테이너로서 여러 개의 JButton 컴포넌트를 가진다.
3. JFrame은 최상위 컨테이너다.
4. 컴포넌트들은 컨테이너 없이도 출력된다.​

 

 

[9장 6번]  

컴포넌트와 컨테이너에 대해 잘못 말한 것을 모두 찾아라.

1. 배치관리자를 가지는 것은 컨테이너만의 고유 기능이며, 컴포넌트는 가질 수 없다.
2. 배치관리자는 자신이 소속된 컨테이너의 크기를 조절한다.
3. 컨테이너가 생성될 때 배치관리자가 없는 상태이므로 배치관리자를 설정해야 한다.
4. 한 컨테이너는 여러 개의 배치관리자를 가질 수 있다.
5. 배치관리자의 기능은 컨테이너에 포함된 컴포넌트들의 위치와 크기를 설정하는 것
6. 개발자는 자바에서 주어진 것 외 새로운 배치관리자를 만들어 사용할 수 있다.
7. 컨테이너가 배치관리자를 가지지 않도록 할 수 없다.

 

 

[9장 7번]

200*300크기의 스윙프레임을 만든 코드이다. 빈칸에 필요한 코드를 채워라.

____________________ // 이곳에 필요한 import 문을 삽입하라
public class MyFrame ____________________{
    public MyFrame(){
        ____________________ // 프레임 타이틀로 "hello" 문자열 출력
        ____________________ // 프레임 크기를 200x300으로 설정
        ____________________ // 프레임 화면 출력
    }
    public static void main(String[] args){
        MyFrame frame = ____________________
    }
}

>> 풀이

import javax.swing.*; // 이곳에 필요한 import 문을 삽입하라
public class MyFrame extends JFrame{
    public MyFrame(){
        super("hello"); // 프레임 타이틀로 "hello" 문자열 출력
        setSize(200, 300); // 프레임 크기를 200x300으로 설정
        setVisible(true); // 프레임 화면 출력
    }
    public static void main(String[] args){
        MyFrame frame = new MyFrame();
    }
}

 

 

[9장 8번]

스윙프레임을 작성한 코드이다. 빈칸에 필요한 코드를 채워라.

____________________ // 이곳에 필요한 import 문을 삽입하라
____________________ // 이곳에 필요한 import 문을 삽입하라
public class MyFrame ____________________{
    public MyFrame(){
        ____________________ // 컨텐트팬 알아내기
        ____________________ // 컨텐트팬에 FlowLayout 배치관리자 설정
        ____________________ // 컨텐트팬 배경색을 노란색으로 설정
        ____________________ // 컨텐트팬에 "click" 버튼 달기
        setSize(300, 300);
        setVisible(true):
    }
}

>> 풀이

import javax.swing.*; // 이곳에 필요한 import 문을 삽입하라
import java.awt.*; // 이곳에 필요한 import 문을 삽입하라
public class MyFrame extends JFrame{
    public MyFrame(){
        Container c = getContentPane(); // 컨텐트팬 알아내기
        c.setLayout(new FlowLayout()); // 컨텐트팬에 FlowLayout 배치관리자 설정
        c.setBackground(Color.YELLOW); // 컨텐트팬 배경색을 노란색으로 설정
        c.add(new JButton("click")); // 컨텐트팬에 "click" 버튼 달기
        setSize(300, 300);
        setVisible(true):
    }
}

 

 

[9장 9번]

다음 지시에 따라 컨테이너 c에 배치관리자를 설정하는 코드를 작성하라.

Container c;
c.____________________

(1) 컴포넌트 사이의 수평 수직 간격이 각각 3, 4픽셀인 BorderLayout

setLayout(new BorderLayout(3, 4));

 

(2) 컴포넌트 사이의 수평 수직 간격이 각각 5, 6픽셀이고 우측정렬을 하는 FlowLayout

setLayout(new FlowLayout(5, 6));

 

(3) 컴포넌트 사이의 수평 수직 간격이 각각 7, 8픽셀이고 행5, 열2인 GridLayout

setLayout(new GridLayout(7, 8, 5, 2));

 

(4) 현재 등록된 배치관리자 삭제

setLayout(null);

 

 

 

[9장 10번]

버튼 컴포넌트를 절대 위치에 배치하고자 한다. 주석을 참고해 빈칸을 완성하라.

____________________ // 이곳에 필요한 import 문을 삽입하라
____________________ // 이곳에 필요한 import 문을 삽입하라
public class MyFrame ____________________{
    public MyFrame(){
        ____________________ // 컨텐트팬 알아내기
        ____________________ // 컨텐트팬에 배치관리자 제거
        ____________________ // "click" 문자열의 버튼 컴포넌트 생성
        ____________________ // 버튼의 크기를 100x30으로 설정
        ____________________ // 버튼의 위치를 (50,70)으로 설정
        ____________________ // 컨텐트팬에 버튼 달기
        setSize(300, 300);
        setVisible(true):
    }
    public static void main(String[] args){
        MyFrame frame = ____________________
    }
}

>> 풀이

import javax.swing.*; // 이곳에 필요한 import 문을 삽입하라
import java.awt.*; // 이곳에 필요한 import 문을 삽입하라
public class MyFrame extends JFrame{
    public MyFrame(){
        Container c = getContentpane(); // 컨텐트팬 알아내기
        c.setLayout(null); // 컨텐트팬에 배치관리자 제거
        JButton jb = new JButton("click"); // "click" 문자열의 버튼 컴포넌트 생성
        jb.setSize(100, 30); // 버튼의 크기를 100x30으로 설정
        jb.setLocation(50, 70); // 버튼의 위치를 (50,70)으로 설정
        c.add(jb); // 컨텐트팬에 버튼 달기
        setSize(300, 300);
        setVisible(true):
    }
    public static void main(String[] args){
        MyFrame frame = new MyFrame();
    }
}