[네트워크 프로그래밍2]연습문제 9장(이론 및 실습)

류명운

·

2015. 9. 15. 10:49

반응형


ex9.zip


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

}

}


반응형