KH/JAVA

# 39 AWT- Pane1,Button,CheckBox,Label,Frame,Choice

오늘의 진 2022. 8. 1. 14:45

AWT(Abstract Window Toolkit)

 

사용자가 컴퓨터를 사용하기 위해서는 운영체제의 도움이 필요하다. 

운영체제는 사용자가 컴퓨터를 쉽게 사용할 수 있는 환경을 제공하는데 이를 Interface라고 하고 일반적으로 Interface는

CUI(Character User Interface) == CLI(Command Line Interface), GUI(Graphical User Interface)가 있다. 

CUI는 DOS와 같은 텍스트 환경에서 명령어를 직접 입력해 사용하는 방식이다.

사용자가 모든 명령어를 외워야 한다는 점이 어렵다. 결국 사용자와의 접근이 쉽지 않아 GUI에 자리를 내주게 되었다. 

GUI는 컴퓨터를 쉽게 사용할 수 있도록 만들어진 기능이다.

명령어가 아닌 Icon을 사용해 원하는 작업을 할 수 있다. 

 

1980년대 Apple 컴퓨터에서 MAX OS라는 운영체제를 출시했다. 이 운영체제는 DOS와는 다르게 화면에 있는 그림을 마우스를 클릭해 사용하도록 고안되어 많은 사람들이 쉽게 컴퓨터를 사용할 수 있게 되었다. 

그 이후에 개발된 많은 OS도 이러한 그래픽을 이용한 사용자 입력 방식을 도입했다.

가장 대표적인 예가 Window 95이다. 윈도우 95는 완벽한 GUI 환경을 제공했다. 

 

자바언어도 GUI를 처리하기 위해 AWT와 Swing이라는 API를 가지고 있다.

AWT는 운영체제에 상관 없이 동일하게 GUI 프로그램을 작성할 수 있지만 운영체제에 따라 모양이 약간씩 다르게 출력된다. Java 2에 새롭게 추가된 GUI패키지인 Swing 은 운영체제에 상관없이 동일하게 작동하고 AWT보다 깨끗한 GUI 환경을 제공한다. 하지만 AWT에 비해 상당히 많은 메모리를 차지한다. 또한 AWT를 확장해 만들었기 때문에 AWT를 알아야 자세히 알 수 있다. 

 

AWT Package

: 자바는 GUI를 처리하기 위해 AWT패키지를 제공한다. 

                                                                                   object
                                                                                       | 
                                                                               Component  
    |                  |                   |                 |                |               |             |             |                |   
Button        Canvas     ChechBox   Choice     Container    Label      List    Scrollbar     TextComponent
                                                                            |                                                                |
                                                                            |                                                                |
                                       window                    panel        scrollPane                       TextArea         TextField
                                         |
                          |                            |
                    Dialog                    Frame
                       |
               FikeDialog

 

 

 

 

     [ AWT를 사용하여 GUI 프로그램 작성과정 ]

           1. 컴포넌트를 생성한다.

           2.컴포넌트를 컨테이너에 담는다. 

           3.컴포넌트에 대한 이벤트를 처리한다. 

 

 

 

 


 (ATW 의 메소드, 기능들을 살펴 보자. )

 

 ▶▶ Frame  

 

프레임을 만드는 방법 

 

방법1. 객체를 만드는 방법

package ja_0801;

import java.awt.Frame;

public class Frame_1 {
	public static void main(String[] args) {

		// 컨테이너를 만듦
		Frame ff = new Frame("수선화 ~~~"); //프레임의 타이틀(이름) 지정

		ff.setSize(300, 300); // 가로 * 세로 크기 지정
		ff.setVisible(true); // 프레임을 보여주세요 ~

	}
}

방법2. 객체를 상속받아서 사용하는 방법

package ja_0801;

import java.awt.Color;
import java.awt.Frame;

public class Frame_2 extends Frame {

	public Frame_2() {
		super("아름다운 사람");
		setBackground(new Color(200, 200, 100)); //백그라운드 색
		//setBackground(Color.BLUE); //이렇게도 지정가능하지만 지양한다.
		setLocation(400, 400);//프레임이 어디에 나올것인지 위치 지정
		setSize(300, 300);//프레임 크기 지정
		setVisible(true);
	}

	public static void main(String[] args) {
		new Frame_2();
	}

}
package ja_0801;

import java.awt.Frame;

public class Frame_3 extends Frame {

	public Frame_3(String str) {
		super(str);// 프레임 타이틀 지정
		setSize(300, 300);
		setVisible(true);
	}

	public static void main(String[] args) {

		new Frame_3("@@나만의 프레임@@");

	}

}

 

🟢화면에서 프레임의 위치를 조정하는 방법

검은 사각형을 화면, 보라색 상자를 프레임이라고 하고 프레임에서 저 노란색 포인트를 기준으로 프레임의 좌표가 조정됨

예를들어 좌표를 화면상에서 2사분면 중앙에 위치시키고자 한다면 우선 프레임의 노란 포인트를 2사분면 중앙으로 보낸다. x축은 좌에서우로 y축은 위에서 아래로 간다고 생각해야 한다.  즉 x축은 화면에서 좌에서 부터 1/4 지점, y축도 위에서 부터 1/4지점으로 움직인다. 이제 프레임이 중간에 와야 함으로 가로는 프레임의 가로 길이/2만큼 빼서 이동 세로도 프레임세로/2만큼 빼서 다시 위로 올려주면된다. 

즉    frameName.setLocation(screenSize2.width/4-프레임가로/2 , screenSize2.height/4-프레임세로/2);    형태가 된다.

 

 

프레임이 화면 중간에 위치하게 하는 방법 

: 화면크기의 절반값에서 Frame크기의 절반값을 뺀 위치로 하면 Frame이 화면 가운데에 위치하게 된다.

         setLocation(screenSize.width / 2 - frame가로/2, screenSize.height / 2 -frame세로/2);

 

(예)

package ja_0802;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;

public class Frame_5 {
	public static void main(String[] args) {

		Frame ff = new Frame("1");

		ff.setSize(400, 300);

		Toolkit tk = Toolkit.getDefaultToolkit();
		// 구현된 Toolkit 객체를 얻는다.

		Dimension screenSize = tk.getScreenSize();
		// 화면 크기를 구한다.

		ff.setLocation((screenSize.width /4)*3-200 , (screenSize.height /4)*3-150);
		// 화면크기의 절반값에서 Frame크기의 절반값을 뺀 위치로 하면 Frame이 화면 가운데에 위치하게 된다.
		
		
	     ff.setBackground(new Color(0,255,0));

		ff.setVisible(true);
		
		Frame f2 = new Frame("2");
		
		
		f2.setSize(400,300);
		Dimension screenSize2 = tk.getScreenSize();
		f2.setLocation(screenSize2.width/4-200 , screenSize2.height/4-150);
		f2.setBackground(new Color(255,255,0));
		f2.setVisible(true);
		
		Frame f3 = new Frame("3");
		f3.setSize(400,300);
		Dimension screenSize3 = tk.getScreenSize();
		f3.setLocation((screenSize2.width/4)*3-200 , screenSize2.height/4-150);
		f3.setBackground(new Color(0,0,255));
		f3.setVisible(true);
		
		Frame f4 = new Frame("4");
		f4.setSize(400,300);
		Dimension screenSize4 = tk.getScreenSize();
		f4.setLocation(screenSize2.width/4-200 , (screenSize2.height/4)*3-150);
		f4.setBackground(new Color(0,255,255));
		f4.setVisible(true);
		
	}
}

 

 

 

 

package ja_0802;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;

public class Label_1 {
public static void main(String[] args) {
	Label label1, label2, label3,label4;
	
	Frame ff = new Frame("내가 만든 레이블");
	
	ff.setLayout(new FlowLayout()); //이거 안적어주면 마지막 것만 보여준다. 
	//디폴트는 보더 레이아웃 즉 레이아웃 위에 쌓여서 마지막 것만 보임
	label1 = new Label("<봄>");
	label2 = new Label("<여름>");
	label3 = new Label("<가을>");
	label4 = new Label("<겨울>");
	
	ff.setBackground(new Color(221,137,242));
	label2.setBackground(new Color(252,255,144));
	label2.setForeground(new Color(145,204,255));
	
	//프레임에 레이아웃을 add
	ff.add(label1);
	ff.add(label2);
	ff.add(label3);
	ff.add(label4);
	
	ff.setSize(300,200);
	ff.setVisible(true);
}
}

 

 

 

 

 

 


 ▶▶ Button 

한글이 깨져서 나올때   :    -Dfile.encoding=MS949

 

버튼은 가장 많이 사용되는 GUI 컴포넌트이고, 주로 사용자의 입력을 받을 때 사용한다. 

사용작 ㅏ어떤 결정을 내릴때 사용하는 컴포넌트 이다. 

[ 생성자 ]
public Button( );           : 기본생성자
public Button( String label ) ;        :  문자열이 지정된 생성자

 

  [ 중요 메소드들 ]

public String getLabel (  )  버튼위에 잇는 문자열 반환
public void setLabel ( String label) 버튼 위의 문자열 지정
public void addActionListener ( ActionListener al ) 버튼에서 발생한 ActionEvent 를 처리할 수 있도록 등록
public String getActionCommand (  )  버튼에서 이벤트가 발생하면 Command(명령) 이름을 받아온다
public void setActionCommand ( String cmd ) 버튼에 Command 이름 설정

 

 

한글이 깨져서 나올때 설정방법

 

 

 

 

(예시) - 버튼만들기 / 생성자 방법

package ja_0801;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;

public class Button_1 extends Frame {

	Button btn1, btn2, btn3;

	public Button_1(String str) {
		super(str);
		setLayout(new FlowLayout()); 
		// 좌에서 우로 배치를 해주다가 더이성 우로 배치가 어려우면 아래로 내려서 만듬
        //기본레이아웃은 보더레이아웃 동서남북 배치

		btn1 = new Button("가위");
		btn2 = new Button("바위");
		btn3 = new Button("  보  ");
		
        //add하면 프레임에 붙는다. 프레임은 다른 컴퍼넌트를 담을수 있는 컨테이너이니까! 
		//( 컴퍼넌트들은 컨테이너에 담겨서 보여진다.)
		add(btn1);
		add(btn2);
		add(btn3);

		setSize(300, 300);
		setVisible(true);
	}

	public static void main(String[] args) {
		new Button_1("가위바위보");
	}

}

 

 

 

 

 

 

 

 

 

(예시) - 버튼만들기 / 객체를 만드는 방법

package ja_0801;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;

public class Test {
	public static void main(String[] args) {

		Frame fo = new Frame("가위바위보");
		Button btn1, btn2, btn3;

		fo.setLayout(new FlowLayout());
		fo.setSize(300, 300);
		fo.setVisible(true);

		btn1 = new Button("가위");
		btn2 = new Button("바위");
		btn3 = new Button("  보  ");

		fo.add(btn1);
		fo.add(btn2);
		fo.add(btn3);

	}

}

(예)

package ja_0801;

import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;

public class Button_2 extends Frame {

	Label lbl1, lbl2, lbl3;
	Button btn1, btn2, btn3;

	public Button_2(String str) {
		super(str);
		setLayout(new FlowLayout());
		lbl1 = new Label("가위");
		lbl2 = new Label("바위");
		lbl3 = new Label("보");

		btn1 = new Button("가위");
		btn2 = new Button("바위");
		btn3 = new Button("보");

		add(lbl1);   add(btn1);
		add(lbl2);   add(btn2);
		add(lbl3);   add(btn3);

		lbl1.setEnabled(false);// 활성화가 안됨
		btn3.setEnabled(false); //기본값은  true인데 활성화를 없앰.
		
		btn2.setBackground(new Color(255,0,0)); // 버튼 배경색
		btn2.setForeground(new Color(0,255,0));  // 버튼 글자색
		
		setSize(300,200);
		setLocation(300,300);
		setVisible(true);

	}

	public static void main(String[] args) {
		new Button_2("버튼과 레이블");
	}

}

 

 

 

 

 

 

 

 

 

(예) 레이블과 버튼 ,  버튼 색상 랜덤으로 주기 

package ja_0801;

import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;

public class Button_3 extends Frame {

	Label[] lbl = new Label[50]; // 레이블은 설명을 적고자 할때 사용함.
	Button[] btn = new Button[50];

	public Button_3(String str) {
		super(str);
		setLayout(new FlowLayout());

		for (int i = 0; i < 50; i++) {

			lbl[i] = new Label(i + "레이블");
			btn[i] = new Button(i + "버튼");
			
			//랜덤을 사용하여 백그라운드 색 지정 
			lbl[i].setBackground(new Color((int)(Math.random()*70),
					                       (int)(Math.random()*70),
					                       (int)(Math.random()*(256-180)+180)));   //파란계열
			btn[i].setBackground(new Color((int)(Math.random()*(256-180)+180), 
					                       (int)(Math.random()*70),
					                       (int)(Math.random()*70)));  //빨강계열
			//레드(255,0,0)이므로 (255에가까운수랜덤, 0에가까운수,0에가까운수) 주면된다.

			add(lbl[i]); // 프레임에 붙는다 
			add(btn[i]);
		}
		setSize(500, 500);
		setVisible(true);
	}

	public static void main(String[] args) {

		new Button_3("배열레이블, 버튼만들기");

	}

}

 ▶▶ Label  (레이블)   

: 레이블은 문자열을 출력하는 컨포넌트이다.

보통 화면에서 다른 컨포넌트의 용도를 알리기 위한 목적으로 사용된다.

 

package ja_0802;

import java.awt.Color;
import java.awt.Frame;
import java.awt.Label;

public class Login_1 {
	public static void main(String[] args) {

		Frame ff = new Frame("Login");

		ff.setSize(300, 200);
		ff.setLayout(null); // null일때는 좌표값을 정해주어야 보인다.

		Label id = new Label("ID : ");
		id.setBounds(100, 100, 30, 18); // (x축에서위치,y에서위치,가로크기,세로크기)
		// setLocation + setSize

		Label pwd = new Label("Password : ");
		pwd.setBounds(100, 120, 100, 18);

		Label adrass = new Label("adrass : ");
		adrass.setBounds(100, 140, 100, 18);
		adrass.setBackground(new Color(100, 255, 110));

		ff.add(id);
		ff.add(pwd);
		ff.add(adrass);
		ff.setVisible(true);

	}
}

 

 

 

 

 

 

 

 

 

 

 

 

 


 ▶▶ CheckBox   

 

Checkbox cbx1 = new Checkbox("들어갈내용", false); false : 체크안된상태 / true : 체크된 상태
Checkbox cbx1 = new Checkbox("들어갈 내용", cbg, false); cbg : 체크박스이다
package ja_0802;

import java.awt.Checkbox;
import java.awt.FlowLayout;
import java.awt.Frame;

public class CheckBox_1 {
	public static void main(String[] args) {

		Frame ff = new Frame("체크박스 테스트 ");

		ff.setLayout(new FlowLayout());

		Checkbox cbx_1 = new Checkbox("남자", false);// 체크안되서나옴
		Checkbox cbx_2 = new Checkbox("여자", true); // 체크가되서나옴

		ff.add(cbx_1);
		ff.add(cbx_2);

		ff.setSize(200, 200);
		ff.setVisible(true);

	}
}

 

 

 

 

 

 

 

 

🟢체크박스 그룹

 

체크박스들을 한 체크박스 그룹에 넣게 되면 다중선택이 불가능하다. 단일선택만 가능 

선택 모양도 동그라미로 바뀜

 

package ja_0802;

import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;

public class CheckBox_2 extends Frame {

	Checkbox cbx1, cbx2, cbx3, cbx4;
	Checkbox cbx11, cbx22, cbx33, cbx44;
	Checkbox cbx111, cbx222, cbx333, cbx444;
	CheckboxGroup cbg, cbg2, cbg3;

	public CheckBox_2(String str) {

		super(str);
		setLayout(new FlowLayout());

		Label lbl = new Label("좋아하는 계절은 ", Label.CENTER); 
        // Label.CENTER : 글자가 레이블의 중간에옴
		lbl.setBackground(new Color(219, 201, 255));
		add(lbl);

		cbg = new CheckboxGroup();
//		라디오 버튼을 만들기 위해서는 체크박스를 CheckGroup으로 묶어야 하기 때문에
//		ChechGroup 클래스 객체를 생성해서 사용한다.
//		checkbox 매개변수로 
//		CheckboxGroup클래스 사용

		cbx1 = new Checkbox("봄", cbg, false);
		cbx2 = new Checkbox("여름", cbg, true);
		cbx3 = new Checkbox("가을", cbg, true);
		cbx4 = new Checkbox("겨울", cbg, true);
		// 체크박스 그룹안에서는 여러개 true를 주면 마지막 것만 트루로 나온다.

		add(cbx1);
		add(cbx2);
		add(cbx3);
		add(cbx4);

		Label lbl2 = new Label("좋아하는 산이름 ", Label.CENTER);
		lbl2.setBackground(new Color(158, 210, 255));
		add(lbl2);

		cbg2 = new CheckboxGroup();

		cbx11 = new Checkbox("지리산", cbg2, false);
		cbx22 = new Checkbox("무등산", cbg2, true);
		cbx33 = new Checkbox("한라산", cbg2, false);
		cbx44 = new Checkbox("북한산", cbg2, false);

		add(cbx11);
		add(cbx22);
		add(cbx33);
		add(cbx44);

		Label lbl3 = new Label("좋아하는 꽃이름 ", Label.CENTER);
		lbl3.setBackground(new Color(100, 110, 255));
		add(lbl3);

		cbg3 = new CheckboxGroup();

		cbx111 = new Checkbox("장미", cbg3, false);
		cbx222 = new Checkbox("백합", cbg3, true);
		cbx333 = new Checkbox("작약", cbg3, false);
		cbx444 = new Checkbox("무궁화", cbg3, false);

		add(cbx111);
		add(cbx222);
		add(cbx333);
		add(cbx444);

		setSize(250, 200);
		setVisible(true);

	}

	public static void main(String[] args) {
		new CheckBox_2("@@ 라디오 버튼 테스트 @@");
	}

}

 

 

 

 


 ▶▶  List    

: 선택버튼은 한개의 아이템만 선택할수 있는 반면 리스트는 한개 이상의 항복을 선택할수있다.
// 기본적인 사용방법은 선택버튼(Choice)과 비슷하다. 

 

[ 생성방법 ]

List    list    =   new  List  ( int a , true) ; 

a : 생성된 list에서 한번에 보이는 항목의 갯수이다. (스크롤해서 밑으로 내려가면서 봐야함 )
true : 리스트의 항목 다중 선택 가능 
false : 리스트의 항복 다중 선택 불가능 

 

(예) - 리스트 생성하기

package ja_0802;

import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.List;

public class List_1 extends Frame {

	public List_1(String title) {
		super(title);

		setLayout(new FlowLayout());

		List list = new List(3, false);
		// List 객체생성 3은 화면에 한번에 출력될 항복의 갯수
		// false는 다중 선택 불가
		// true : 다중 선택 가능

//		리스트
//		선택버튼은 한개의 아이템만 선택할수 있는 반면 리스트는 한개 이상의 항복을 선택할수있다.
//		기본적인 사용방법은 선택버튼과 비슷하다. 

		Label lbl = new Label("List Test ~~~");

		add(lbl);
		list.add("386DX");
		list.add("486DX");
		list.add("486DX66");
		list.add("펜티엄");
		list.add("펜티엄4");
		list.add("에슬론XP3");
		list.add("인텔듀얼코어");

		add((Component) list); // 프레임에 list를 add
		setSize(200, 200);
		setVisible(true);

	}

	public static void main(String[] args) {
		new List_1("list Test ~~~");
	}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

(예)  - 리스트에 위치 지정해주기 ( setLocation )

package ja_0802;

import java.awt.Frame;
import java.awt.List;

public class List_2 {
	public static void main(String[] args) {
		Frame ff = new Frame("List - Select");
		ff.setSize(500, 400);
		// ff.setLayout(new FlowLayout());
		//FlowLayout일때는 내가 setLocation으로 위치를 지정해줘도 의미가 없다.
		//자동으로 좌측에서부터 정렬을한다. 
		ff.setLayout(null);
		//null은 레이아웃을 쓰지 않겠다는 말이다. 
		//즉 내가 setLocation을 통해 위치를 잡아주어야함

		List selectOne = new List(4);

		selectOne.setLocation(20, 40);
		selectOne.setSize(150, 80);

		selectOne.add("Student");
		selectOne.add("Teacher");
		selectOne.add("Driver");
		selectOne.add("Computer Programmer");
		selectOne.add("Sales Man");
		selectOne.add("Musician");
		selectOne.add("Director");

		List selectMany = new List(5, true);
		selectMany.setLocation(20, 170);
		selectMany.setSize(150, 100);

		selectMany.add("Student");
		selectMany.add("Teacher");
		selectMany.add("Driver");
		selectMany.add("Computer Programmer");
		selectMany.add("Sales Man");
		selectMany.add("Musician");
		selectMany.add("Director");

		List selectMany2 = new List(3, false);
		selectMany2.setLocation(250, 100);
		selectMany2.setSize(150, 100);

		selectMany2.add("Student");
		selectMany2.add("Teacher");
		selectMany2.add("Driver");
		selectMany2.add("Computer Programmer");
		selectMany2.add("Sales Man");
		selectMany2.add("Musician");
		selectMany2.add("Director");

		ff.add(selectOne);
		ff.add(selectMany);
		ff.add(selectMany2);
		ff.setVisible(true);

	}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 ▶▶  Choice   

: 선택버튼은 여러개의 항복을 선택할 수 있는 컴포넌트이다.

선택 버튼을 구성하는 아이템은 문자열로 되어있으며 Choice에 여러개를 붙일 수 있다. 

Choice는 윈도우에서 일반적으로 콤보(Combo) 버튼이라고 한다.

 

 

package ja_0802;

import java.awt.Choice;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;

public class Choice_1 extends Frame {

	public Choice_1(String str) {
		super(str);
		setLayout(new FlowLayout());

		Label lbl = new Label("국가를 선택하세요");
		Choice choice = new Choice(); // 객체 생성
		choice.add("대한민국");
		choice.add("미국");
		choice.add("프랑스");
		choice.add("중국");
		choice.add("영국");
		choice.add("독일");
		choice.add("러시아");

		// 레이블에 붙임(add)
		add(lbl);
		add(choice);

		setSize(300, 300);
		setVisible(true);
	}

	public static void main(String[] args) {
		new Choice_1("Choice 예제 ");
	}

}

 

 

 

 

 

 

 

 

 

(예) - 배열을 이용하는 방법

package ja_0802;

import java.awt.Choice;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;

public class Choice_2 extends Frame {

	String[] continent = { "아시아", "유럽", "아메리카", "아프리카", "오세아니아" };
	String[] country = { "대한민국", "영국", "캐나다", "이집트", "호주" };
	String[] su = { "서울", "런던", "오타와", "카이로", "캔버라" };

	public Choice_2(String str) {
		super(str);
		setLayout(new FlowLayout());

		Label lbl1 = new Label("대륙을 선택하세요 : ");
		Label lbl2 = new Label("국가를 선택하세요 : ");
		Label lbl3 = new Label("수도를 선택하세요 : ");

		Choice choice1 = new Choice();
		Choice choice2 = new Choice();
		Choice choice3 = new Choice();

		for (int i = 0; i < continent.length; i++) {
			choice1.add(continent[i]);
		}

		for (int i = 0; i < country.length; i++) {
			choice2.add(country[i]);
		}
		for (int i = 0; i < su.length; i++) {
			choice3.add(su[i]);
		}

		add(lbl1);
		add(choice1);
		add(lbl2);
		add(choice2);
		add(lbl3);
		add(choice3);

		setSize(200, 200);
		setVisible(true);
	}

	public static void main(String[] args) {
		new Choice_2("Choice 예제2");
		System.out.println("Hello World");
	}

}

 

 

 


 ▶▶  ScrollBar   

스크롤바는 가로와 세로로 길쭉한 형태로 되어있다. 

주로 값의 범위를 지정할 때 많이 사용된다. 

 

package ja_0802;

import java.awt.Frame;
import java.awt.Label;
import java.awt.Scrollbar;

public class ScrollBar_1 extends Frame {

	public ScrollBar_1(String title) {
		super(title);

		// (수직 , 수직으로줬으니 세로로부터 10의 위치에서시작,스크롤바의사이즈, 움직이는범위 시작점, 움직이는 범위 마지막점)
		Scrollbar srb1 = new Scrollbar(Scrollbar.VERTICAL, 10, 100, 0, 255);// 수직
		// 이동거리 : 255-100인 155만큼 움직인다.

		Scrollbar srb2 = new Scrollbar(Scrollbar.HORIZONTAL, 100, 50, 0, 255); // 수평
		// 바는 255-50 만큼 움직일수있다.

		// add("West", srb1);//서쪽 스크롤바srb1을 서쪽에 붙인다.
		add("Center", new Label("스크롤바 테스트"));
		// add("South", srb2);

		add("East", srb1);
		add("North", srb2);

		setSize(200, 200);
		setVisible(true);

	}

	public static void main(String[] args) {
		new ScrollBar_1("ScrollBar Test ~~~");
	}

}

 

(예) - 패널두개 사용하기

package ja_0802;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.Scrollbar;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;

public class ScrollBar_2 extends Frame implements AdjustmentListener {

	Scrollbar red, green, blue;

	Panel panel1, panel2;

	public ScrollBar_2(String title) {
		super(title);
		setLayout(null);
		red = new Scrollbar(Scrollbar.HORIZONTAL, 10, 20, 0, 275); // 0-255까지 움직임
		green = new Scrollbar(Scrollbar.HORIZONTAL, 10, 20, 0, 275);
		blue = new Scrollbar(Scrollbar.HORIZONTAL, 10, 20, 0, 275);

		// 이벤트를 달아줌
		red.addAdjustmentListener(this); // this : 자기자신이가진 인터페이스 djustmentListener를 쓰겠다.
		green.addAdjustmentListener(this);// 즉 오버라이드된 adjustmentValueChanged 호출
		blue.addAdjustmentListener(this);

		panel1 = new Panel(); // 색깔나오는 부분 패널1
		panel2 = new Panel(); // 바가나오는 부분 패널2
		panel2.setLayout(new FlowLayout());

		panel1.setLocation(20, 40);
		panel1.setSize(350, 200);
		panel2.setLocation(20, 300);
		panel2.setSize(250, 100);

		// 패널2에 바3개 추가해주기
		panel2.add(red);
		panel2.add(green);
		panel2.add(blue);

		// 프레임에 패널 붙이기
		add(panel1);
		add(panel2);

		// add("Center",panel1);
		// add("South", panel2);

		setSize(350, 350);
		setVisible(true);

	}

	@Override
	public void adjustmentValueChanged(AdjustmentEvent e) {
		panel1.setBackground(new Color(red.getValue(), green.getValue(), blue.getValue()));

		System.out.println("빨강 : " + red.getValue());
		System.out.println("초록 : " + green.getValue());
		System.out.println("파랑 : " + blue.getValue());

	}

	public static void main(String[] args) {
		new ScrollBar_2("ScrollBar Test~~~");
	}

}

 

 

 


 ▶▶  Panel   

package ja_0802;

import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;

public class Panel_1 {
	public static void main(String[] args) {

		Frame ff = new Frame("Panel Test~~");

		ff.setSize(300, 500);
		ff.setLayout(null);

		Panel p1 = new Panel();
		p1.setBackground(new Color(100, 125, 255)); // 파랑
		p1.setSize(150, 100);
		p1.setLocation(50, 50);

		Panel p2 = new Panel();
		p2.setBackground(new Color(250, 125, 155));// 분홍
		p2.setSize(150, 100);
		p2.setLocation(50, 170);

		Panel p3 = new Panel();
		p3.setBackground(new Color(30, 220, 95));// 초록
		p3.setSize(150, 100);
		p3.setLocation(50, 290);

		Button ok = new Button("ok~");
		Label cancel = new Label("CANCEL", Label.CENTER);

		p1.add(ok);// 버튼을 만들어 두고 붙이기
		p2.add(new Button("나 버튼")); // 버튼을 바로 new로 만들면서 붙이기
		p2.add(cancel);
		p3.add(new Button("1번"));
		p3.add(new Button("2번"));
		p3.add(new Button("3번"));

		ff.add(p1);
		ff.add(p2);
		ff.add(p3);
		ff.setVisible(true);

	}

}

 

만약 p1.add(ok); 

        p2.add(ok);

라고 코드를 작성해주면 같은 버튼을 2번 쓰게된 이러한 상황에서는 마지막에 불러온 p2에만 ok 버튼이 생긴다. 

new 버튼으로 생성해주면 서로 다른 버튼이므로 이름이 같아도

두개다 생성된다. 

 

 

 

 

 

 

 

 

 

 

 

 

(예) - 동서남북 배치 

프레임은 디폴트로 보더레이아웃(BorderLayOut)을 이용한다. 

           가운데를 중심으로 동서남북 배치를가진다. 

패널은 기본적으로 플로우레이아웃을 이용(좌에서 우로 배치) 

package ja_0803;

import java.awt.Button;
import java.awt.Checkbox;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;

public class panel_2 extends Frame {

	public panel_2(String title) {
		super(title);

		Panel panel1 = new Panel();

		panel1.add(new Button("Panel 1 위의 버튼"));
		panel1.add(new Checkbox("홍길동"));

		Panel panel2 = new Panel();

		panel2.add(new Label("라벨라벨"));
		panel2.add(new Button("panel2위의 버튼"));

		add("North", panel1);
		add("Center", new Button("버튼"));
		add("South", panel2);
		// 방향을 지정해주지 않고 add를 하면 센터에 누적되어 마지막 것만 보인다.

		setSize(400, 400);
		setVisible(true);

		Panel panel3 = new Panel();

		panel3.add(new Button("버튼3"));
		panel3.add(new Button("버튼33"));

		Panel panel4 = new Panel();

		panel4.add(new Button("버튼4"));
		panel4.add(new Button("버튼44"));

		add("East", panel3);
		add("West", panel4);

	}

	public static void main(String[] args) {
		new panel_2("Panel Test ~~"); // 기본레이아웃인 보더 레이아웃(동서남북배치)으로 나오게 된다.
		// 패널은 기본적으로 플로우 레이아웃을 가진다. (좌우배치)
	}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

package ja_0803;

import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Panel;

public class Panel_3 extends Frame {

	Panel n, w, e, c, s;

	public Panel_3(String title) {
		super(title);

		n = new Panel();
		w = new Panel();
		e = new Panel();
		c = new Panel();
		s = new Panel();

		n.setBackground(new Color(240, 191, 247));
		w.setBackground(new Color(145, 120, 249));
		e.setBackground(new Color(203, 253, 211));
		c.setBackground(new Color(252, 231, 150));
		s.setBackground(new Color(245, 188, 208));

		n.add(new Button("패널1"));
		w.add(new Button("패널2"));
		e.add(new Button("패널3"));
		c.add(new Button("패널4"));
		s.add(new Button("패널5"));

		add("North", n);
		add("West", w);
		add("East", e);
		add("Center", c);
		add("South", s);
		setSize(500, 500);
		setVisible(true);

	}

	public static void main(String[] args) {
		new Panel_3("Test");
	}

}
동서남북 방향을 주었을 경우  방향을 주지않았을경우(마지막 것만 보임)

 

 

(예) - GridLayout

package ja_0803;

import java.awt.Button;
import java.awt.Checkbox;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;

public class Panel_4 extends Frame {

	public Panel_4(String title) {
		super(title);

		Panel panel_1 = new Panel();
		panel_1.setLayout(new GridLayout(4, 2));

		// Grid : 격자무늬를 의미
		// GridLayout(4,2) : 4행 2열을 의미

		panel_1.setBackground(new Color(255, 250, 162));// 노랑
		panel_1.add(new Label(""));
		panel_1.add(new Checkbox("리눅스"));
		panel_1.add(new Label(""));
		panel_1.add(new Checkbox("윈도우10"));
		panel_1.add(new Label(""));
		panel_1.add(new Checkbox("리눅스"));
		panel_1.add(new Label(""));
		panel_1.add(new Checkbox("윈도우10"));

		Panel panel_2 = new Panel();

		panel_2.setBackground(new Color(229, 199, 255));// 보라

//		//라벨색 바꾸기 
		// 방법1
//		Label b = new Label("환경설정");
//		b.setForeground(new Color(200,0,255));
//		panel_2.add(b);

		// 방법2
		panel_2.add(new Label("환경설정", Label.CENTER)).setForeground(new Color(200, 100, 50));
		panel_2.add(new Button("불러오기"));
		panel_2.add(new Button("저장"));
		panel_2.add(new Button("다른이름으로 저장"));

		add("North", panel_1);
		add("Center", panel_2);

		setSize(450, 180);
		setVisible(true);

	}

	public static void main(String[] args) {
		new Panel_4("Panel Test~ ");
	}

}

 

 

 

 

 

'KH > JAVA' 카테고리의 다른 글

# 41 Layout  (0) 2022.08.03
# 40 AWT(2) - TextField , Menu  (0) 2022.08.03
#38 Search , Map  (0) 2022.07.29
# 37 Set - HashSet, TreeSet  (0) 2022.07.28
# 36 Calendar(달력)  (0) 2022.07.28