[네트워크 프로그래밍2]연습문제 9장(이론 및 실습)
류명운
·2015. 9. 15. 10:49
9장 연습문제
- 이론문제
1. 자바로 GUI 응용프로그램을 작성할 수 있도록 JDK에서 제공하는 패키지는 어떤 종류가 있는가?
-> Swing(javax.swing), AWT(java.awt), Javafx(javafx)
2. 자바는 GUI를 구성하기 위해 컴포넌트들을 지원한다. 경량 컴포넌트(light weight component)와 중량 컴포넌트(heavy weight component)는 어떤 점에서 서로 다른가?
-> 경량 컴포넌트는 중량 컴포넌트와는 달리 Native Component와 연계되지 않는 컴포넌트로 Peer에 의존하지 않음
-> 경량 컴포넌트는 완전히 Java만으로 작성되기 때문에 플랫폼에 제한이 없지만, 중량 컴포넌트는 해당 플랫폼이 제공하는 컴포넌트로 작성되어 경직된 컴포넌트임
3. 데스크톱에서 실행되는 GUI 응용프로그램 작성 시 AWT보다 스윙 사용을 권장하는 이유는 무엇인가?
->AWT보다 SWING을 사용한 UI가 더 예뻐서
4. 다음 프로그램에 필요한 import 문을 삽입하라.
-> import javax.swing.*;
5. 다음 코드에서 컨텐트팬을 알아내고 프레임의 배경색으로 파란색을 설정하도록 하라.
-> Container contentPane = frame.getContentPane(); // 프레임의 컨텐트팬을 알아낸다.
-> contentPane.setBackground(Color.BLUE); //프레임의 배경색을 파란색으로 설정한다.
6. 컴포넌트와 컨테이너에 대해서 잘못 말한 것을 모두 찾아라.
1) JFrame과 Frame 모두 컨테이너이다.
2) JPanel 패널은 여러 개의 JButton 컴포넌트를 가질 수 있다.
3) 패널은 여러 개의 패널을 가질 수 있다.
4) JPanel은 어떤 컨테이너에 포함되지 않고도 스스로 화면에 출력 가능한 최상위 컨테이너이다.
5) 일반적으로 컴포넌트들은 컨테이너에 포함되지 않고도 화면에 출력될 수 있다.
6) JFrame 클래스를 상속받아 새로운 클래스를 만들 수 있다.
7) JButton 클래스를 상속받아 새로운 버튼 클래스를 만들 수 있다.
7. 배치 관리자에 대해서 잘못 말한 것을 모두 찾아라.
1) 배치 관리자의 종류는 4가지뿐이다.
2) 컨테이너만 배치 관리자를 가지며 컴포넌트는 가질 수 없다.
3) Panel은 배치 관리자를 가지지만 Button은 배치 관리자를 가질 수 없다.
4) 배치 관리자는 자신이 소속된 컨테이너의 크기를 조절한다.
5) 배치 관리자의 기능은 컨테이너에 포함된 컴포넌트들의 위치와 크기를 설정하는 것이다.
6) 자바의 컨테이너가 생성될 때 디폴트 배치 관리자가 자동으로 생성된다.
7) 배치 관리자는 한 컨테이너에 여러 개 존재할 수 있다.
8) 배치 관리자를 가지지 않도록 컨테이너를 조절할 수 없다.
9) 개발자는 자바에서 주어진 것 외의 새로운 배치 관리자를 구현하여 사용할 수 있다.
8. 다음 프로그램으 실행 결과는 어떠한가? 그 이유는 무엇인가? 정상적으로 작동하도록 프로그램을 수정하라.
-> 에러가 발생한다
-> 이미 MyFrame 클래스에서 JFrame을 상속받았기 때문에 MyFrame 클래스를 인스턴스화 시켜서 기본생성자를 호출시켜줘야 한다.
-> "JFrame mf = new JFrame();" 이 부분을 "MyFrame mf = new MyFrame();"으로 수정한다.
9. 컨텐트팬의 기능은 무엇인가? 컨텐트팬을 가지는 스윙 컴포넌트는 어떤 것이 있는가?
-> 스윙에서 GUI 컴포넌트들이 부착되는 공간으로 사용된다.
-> 스윙 컴포넌트: JApplet JFrame JDialog. 등등
- 실습문제
1. 다음 그림과 같이 "Let's study Java"라는 문자열을 타이틀로 가지고 프레임의 크기가 400 x 200인 스윙 프로그램을 작성하라.
import javax.swing.*; public class ex9_1 extends JFrame { ex9_1() { setTitle("Let's study Java"); // 프레임 타이틀 지정 setSize(400, 200); // 프레임 사이즈 설정 setVisible(true); // 눈에 보여줄 것인가 } public static void main(String args[]) { ex9_1 test = new ex9_1(); } } |
2. BorderLayout을 사용하여 컴포넌트 사이의 수평 간격이 5픽셀, 수직 간격이 7픽셀이 되도록 다음 그림과 같은 스윙 응용프로그램을 작성하라.
import javax.swing.*; import java.awt.*; public class ex9_2 extends JFrame { ex9_2(){ setTitle("BorderLayout Practice"); //프레임 타이틀 지정 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //System의 exit함수를 사용하여 애플리케이션을 끝냄 setLayout(new BorderLayout(5,7)); //배치 관리자(BorderLayout) 및 간격 수평(5),수직(7) 설정 add(new JButton("North"), BorderLayout.NORTH); add(new JButton("South"), BorderLayout.SOUTH); add(new JButton("East"), BorderLayout.EAST); add(new JButton("West"), BorderLayout.WEST); add(new JButton("Center"), BorderLayout.CENTER); setSize(400,200); //프레임 사이즈 설정 setVisible(true); //눈에 보여줄 것인가 } public static void main(String args[]){ ex9_2 test = new ex9_2(); } } |
3. GridLayout을 사용하여 다음 그림과 같이 한 줄에 10개의 버튼을 동일한 크기로 배치하는 스윙 프로그램을 작성하라.
import java.awt.*; import javax.swing.*; public class ex9_3 extends JFrame { ex9_3(){ setTitle("Ten Buttons Frame"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //System의 exit함수를 사용하여 애플리케이션을 끝냄 GridLayout grid = new GridLayout(1,10); //배치 관리자(GridLayout) 1행 10열 생성 setLayout(grid); //배치관리자 적용 for(int i=0; i<10; i++){ //for문을 통해 JButton 생성 add(new JButton(""+i+"")); } setSize(500,200); //프레임 사이즈 설정 setVisible(true); //눈에 보여줄 것인가 } public static void main(String args[]){ new ex9_3(); } } |
4. 문제 3을 수정하여 다음과 같이 각 버튼의 배경색을 서로 다르게 설정하라.
import java.awt.Color; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; public class ex9_4 extends JFrame { ex9_4() { int[][] ColorArray = { { 255, 000, 000 }, { 255, 165, 000 }, { 255, 255, 000 }, { 128, 000, 000 }, { 000, 000, 255 }, { 128, 000, 000 }, { 128, 000, 128 }, { 184, 134, 011 }, { 255, 192, 203 }, { 128, 128, 128 } }; // int형 2차원 배열로 색상표 선언 Color ArrayColor = null; // 색상 데이터 담을 Color타입 변수 선언 setTitle("Ten Buttons Frame"); // 타이틀 지정 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // System의 exit메소드를 사용하여 애플리케이션종료 GridLayout grid = new GridLayout(1, 10); // 배치 관리자(GridLayout) 1행 10열 생성 setLayout(grid); // 배치관리자 적용 JButton[] jb = new JButton[10]; // 배열 10짜리 버튼만들기 for (int i = 0; i < 10; i++) { // for문을 통해 JButton 생성 및 색상 입히기 jb[i] = new JButton("" + i + ""); //JButton 생성 ArrayColor = new Color(ColorArray[i][0], ColorArray[i][1], ColorArray[i][2]); //컬러값 생성 jb[i].setBackground(ArrayColor); //컬러값 적용 add(jb[i]); //프레임에 생성한 JButton 적용 } setSize(500, 200); // 프레임 사이즈 설정 setVisible(true); // 눈에 보여줄 것인가 } public static void main(String args[]) { new ex9_4(); } } /* * {255,000,000}=RED {255,165,000}=ORANGE {255,255,000}=YELLOW * {128,000,000}=GRIN {000,000,255}=BLUE {128,000,000}=NAVY * {128,000,128}=PUPLE {184,134,011}=DARKGOLDENROD {255,192,203}=PINK * {128,128,128}=GRAY */ |
5. GridLayout을 이용하여 다음 그림과 같이 Color.WHITE, Color.GRAY, Color.RED 등 16개의 색을 배경색으로 하는 4 X 4 바둑판을 구성하라.
import java.awt.Color; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class ex9_5 extends JFrame { ex9_5() { setTitle("4x4 Color Frame"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // System의 exit함수를 사용하여 애플리케이션을 끝냄 GridLayout grid = new GridLayout(4, 4); // 배치 관리자(GridLayout) 1행 10열 생성 setLayout(grid); // 배치관리자 적용 JLabel[] jl = new JLabel[16]; // 배열 16짜리 라벨만들기 int[][] ColorArray = { { 255, 000, 000 }, { 255, 165, 000 }, { 255, 255, 000 }, { 128, 000, 000 }, { 000, 000, 255 }, { 128, 000, 000 }, { 128, 000, 128 }, { 184, 134, 011 }, { 255, 192, 203 }, { 128, 128, 128 }, { 210, 180, 140 }, { 255, 215, 000 }, { 240, 230, 140 }, { 127, 255, 000 }, { 128, 128, 000 }, { 220, 020, 060 } }; // int형 2차원 배열로 색상표 선언 Color ArrayColor = null; // 색상 데이터 담을 Color타입 변수 선언 for (int i = 0; i < 16; i++) { // for문을 통해 JLabel 생성 및 색상 입히기 jl[i] = new JLabel("" + i + ""); ArrayColor = new Color(ColorArray[i][0], ColorArray[i][1], ColorArray[i][2]); jl[i].setOpaque(true); // JLabel의 경우 기본 배경색이 투명이기 때문에 setOpaque함수를 // "true"로 지정해줘야 배경색설정이 가능하다. jl[i].setBackground(ArrayColor); // JLabel 색상 적용 add(jl[i]); //생성한 JLabel 컨테이너에 적용 } setSize(500, 200); // 프레임 사이즈 설정 setVisible(true); // 눈에 보여줄 것인가 } public static void main(String args[]) { new ex9_5(); } } /* * {255,000,000}=RED {255,165,000}=ORANGE {255,255,000}=YELLOW * {128,000,000}=GRIN {000,000,255}=BLUE {128,000,000}=NAVY * {128,000,128}=PUPLE {184,134,011}=DARKGOLDENROD {255,192,203}=PINK * {128,128,128}=GRAY {210, 180, 140 }=TAN {255,215,000}=GOLD * {240,230,140}=KHAKI {127,255,000}=CHARTREUSE {128,128,000}=TEAL * {220,020,060}=CRIMSON */ |
6. 20개의 10 X 10 크기의 JLabel 컴포넌트가 프레임 내의 (50, 50)위치에서 (250, 250)내의 영역에서 랜덤한 위치에 출력되도록 스윙 프로그램을 작성하라. 프레임의 크기를 300 X 300으로 하고, JLabel의 배경색은 모두 파란색으로 하라.
import java.awt.Color; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class ex9_6 extends JFrame { ex9_6() { setTitle("Random Labels"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // System의 exit함수 사용 애플리케이션 종료 setLayout(null); // 배치관리자가 없는 컨테이너 설정 JLabel[] jl = new JLabel[20]; // 20개의 방을 갖는 배열 라벨 선언 for (int i = 0; i < 20; i++) { // for문을 통해 JLabel 위치, 크기, 색상 설정 및 컨테이너에 생성 jl[i] = new JLabel(""); int x = (int)(Math.random()*200)+50; //50~250 중에 랜덤함수를 돌려 X좌표 값 선언 int y = (int)(Math.random()*200)+50; //50~250 중에 랜덤함수를 돌려 Y좌표 값 선언 jl[i].setSize(10, 10); //Label 크기를 10x10으로 설정 jl[i].setLocation(x, y); //Label을 랜덤한 x, y위치에 배치 jl[i].setOpaque(true); //색설정여부 jl[i].setBackground(Color.BLUE); //label 배경 파란색으로 지정 add(jl[i]); // 컨테이너에 생성 } setSize(300, 300); // 프레임 사이즈 설정 setVisible(true); // 눈에 보여줄 것인가 } public static void main(String args[]) { new ex9_6(); } } |
'삶의 늪에 들어 가기 전 > 정리중(미정리)' 카테고리의 다른 글
[네트워크 프로그래밍2]스윙 GUI 프로그램 만들기(프레임에 스윙 컴포넌트 붙이기) (0) | 2015.09.18 |
---|---|
[네트워크 프로그래밍2]스윙 GUI 프로그램 만들기(프레임 만들기) (0) | 2015.09.18 |
한국성서대학교 15년도 2학기 4주차 묵상지[한국성서대 묵상지] (2) | 2015.09.14 |
[XML응용]객체지향과 XML 설계 (0) | 2015.09.10 |
[XML응용]Open API 및 Semantic Web과 XML의 관계 (0) | 2015.09.10 |