package appEx;

import java.awt.*;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class LayoutEx extends Frame implements AdjustmentListener {
//	Frame f = new Frame();
	
	Panel p1 = new Panel();
	Panel p2 = new Panel();
	
	public TextField tf;
	public Label la1,la2,la3,la4,la5,la6,la7,la8,la9,la10;
	public Scrollbar sb1, sb2, sb3;
	public TextArea ta;
	
	public LayoutEx() {
		//텍스트필드(한 문장)
		
		//라벨(공백)
		la1 = new Label(" ");
		la2 = new Label(" ");
		la3 = new Label(" ");
		la4 = new Label("현재 색상 ");
		la5 = new Label(" ");
		la6 = new Label(" ");
		la7 = new Label(" ");
		la8 = new Label(" ");
		la9 = new Label(" ");
		la10 = new Label(" ");

		
		//스크롤바 HORIZONTAL
		sb1 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0 ,265);
		sb2 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0 ,265);
		sb3 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0 ,265);
		
		
		tf = new TextField("",30);		
		ta = new TextArea("",20, 10, 0);
		
		
		
		p1.setLayout(new GridLayout(10,1));
		p1.add(la1);
		p1.add(sb1);
		p1.add(la2);
		p1.add(sb2);
		p1.add(la3);
		p1.add(sb3);
		p1.add(la4);
		p1.add(tf);
		p1.add(la5);
		
	
		p2.setLayout(new BorderLayout());
		p2.add(la6, "East");
		p2.add(ta, "Center");
		p2.add(la7, "West");
		p2.add(la8, "North");
		p2.add(la9, "South");
		
		setLayout(new GridLayout(1,2));
		add(p1);
		add(p2);
		
		//이벤트 감청자 등록(움직임을 감지하여 알려줌) 
		sb1.addAdjustmentListener(this);
		sb2.addAdjustmentListener(this);
		sb3.addAdjustmentListener(this);
		
		
		setSize(500,500);
		setVisible(true);
	
		// 닫기(종료)
		addWindowListener(new WindowAdapter() { // 모바일에서 많이 사용(내부 익명)
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}
	
	@Override	
	public void adjustmentValueChanged(AdjustmentEvent e) {
		ta.setBackground(new Color(sb1.getValue(),sb2.getValue(),sb3.getValue()));
		tf.setText("R: " + sb1.getValue() + " G: " + sb2.getValue() + " B: " + sb3.getValue());
		
		
//		int r=0, g=0, b=0;
//		r = sb1.getValue();
//		g = sb2.getValue();
//		b = sb3.getValue();
//		
//		Color color = new Color(r,g,b);
//		ta.setBackground(color);
	}
	
	
	
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new LayoutEx();
	}




}

'JAVA' 카테고리의 다른 글

[JAVA] 콜렉션-Collection  (0) 2020.09.22
[JAVA] Wrapper클래스  (0) 2020.09.22
[JAVA] GUI(AWT)  (0) 2020.09.16
[JAVA] 추상클래스  (0) 2020.09.14
[JAVA] this  (0) 2020.09.14

GUI Progamming이란?

-GUI는 과거에 사용하였던 DOS(CUI)와 같은 방식의 Text기반 OS가 아닌 Graphic을 이용하여

User와 Program간의 상호작용을 할 수 있도록 해주는 Interface를 의미한다.

JAVA에서 이러한 Graphic Programmig을 지원하기 위해 나온 것이 바로 AWT이다.

 

 

AWT의 기본 개념

-AWT(Abstract Window Toolkit)은 GUI Programming을 제작하기 위해 자바에서 제공하는 Library을 모아놓은 것이다.

AWT는 모든 GUI Program에 사용되는 Component 및 Toolkit을 제공하고 있으며 향후에는 JFC와 같은 Swing 및 JAVA 2D 의 모태가 되는 개념이다.

AWT는 OS에 구애받지 않고 쓸 수 있도록 OS의 것을 그대로 사용하지 않고 공통적이고 기본적인 Component들을 추상화시켜 제공한다.

 

 

https://docs.oracle.com/javase/8/docs/api/java/awt/package-frame.html

 

java.awt (Java Platform SE 8 )

 

docs.oracle.com

이 곳에 들어가면 자바 사용할 수 있는 Interface나 class가 있는데 클릭해서 들어가보면 사용 방법이 자세하게 나와있다.

 

 

 

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class GuiEx extends Frame{
	public GuiEx(){
		//패널
		Panel p = new Panel();
		//버튼
		Button b = new Button("버튼");
		b.setLabel("변경된 라벨");
		//체크 박스
		Checkbox ch1 = new Checkbox("체크 박스", true);
		Checkbox ch2 = new Checkbox("체크 박스", false);
		Checkbox ch3 = new Checkbox("체크 박스", false);
		//체크 박스(라디오 버튼)
		CheckboxGroup ch = new CheckboxGroup();
		Checkbox ch4 = new Checkbox("라디오 버튼", true, ch);
		Checkbox ch5 = new Checkbox("라디오 버튼", false, ch);
		Checkbox ch6 = new Checkbox("라디오 버튼", false, ch);
		//초이스(콤보 박스)
		Choice cho = new Choice();
		cho.add("학년 선택");
		cho.add("1학년");
		cho.add("2학년");
		cho.add("3학년");
		cho.add("4학년");
		
		//라벨, 리스트
		Label la = new Label("자바 수강생");
		List ls = new List(5);
		ls.add("List 1");
		ls.add("List 2");
		ls.add("List 3");
		ls.add("List 4");
		ls.add("List 5");
		ls.add("List 6");

		//스크롤바 HORIZONTAL
		Scrollbar sb = new Scrollbar(Scrollbar.HORIZONTAL, 200, 100, 0 ,255);
		//스크롤바 VERTICAL
		Scrollbar sb2 = new Scrollbar(1, 200, 100, 0 ,255);
		//텍스트필드(한 문장)
		TextField tf = new TextField("TextField",50);
		//텍스트 에어리어(여러 문장)
		TextArea ta = new TextArea("TextArea",20, 10, 0);
		//생성한 객체들을 panel에 붙이기
		p.add(ch1);
		p.add(ch2);
		p.add(ch3);
		p.add(cho);
		p.add(ch4);
		p.add(ch5);
		p.add(ch6);
		p.add(b);
		p.add(la);
		p.add(ls);
		p.add(sb);
		p.add(sb2);
		p.add(tf);
		p.add(ta);
		//프레임에 붙이기 (this. 이 생략 되어있음)
		add(p);

		//컨테이너
		setSize(500, 500);
		setVisible(true);
		
		//닫기(종료)
		addWindowListener(new WindowAdapter() { //모바일에서 많이 사용(내부 익명)
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	
	
	}

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

각종 컴포넌트들을 예로 사용한 결과이다.

 

컴포넌트란(ex. Button, Checkbox, TextField 등등)을 말하는데 컴포넌트는 Panel(패널)에 담아 원하는 위치에 집어 넣을 수 있다. 컴포넌트들을 집어 넣은 패널은 또 다시 최상위 컨테이너인 Frame(프레임)에 넣어 배치할 수 있다.

 

하지만, 컴포넌트는 컨테이너(프레임)역할을 할 수 없다. (컨테이너는 컴포넌트 역할을 할 수 있음)

'JAVA' 카테고리의 다른 글

[JAVA] Wrapper클래스  (0) 2020.09.22
[JAVA] GUI 스크롤바(RGB)  (0) 2020.09.20
[JAVA] 추상클래스  (0) 2020.09.14
[JAVA] this  (0) 2020.09.14
[JAVA] 생성자 오버로딩  (0) 2020.09.11

추상 클래스는 객체 생성이 불가능한 클래스(타입)으로 자식 클래스를 통해 간접적으로 객체를 생성한다.

또한 추상클래스는 상속(코드 중복 제거)과 인터페이스의 장점(다형성과 그룹화)을 모두 가지고 있다.

추상 클래스는 abstract키워드를 사용하여 선언하며 어떠한 객체가 스스로 존재할 수 없는 경우 또는 

존재하면 안되는 경우에 사용한다!

 

ex)

class Tiger{
	String name;
}
class Lion{
	String name;
}
class Dog{
	String name;
}

//String name; 이라는 중복 코드가 발생!!

이 중복된 필드를 상속을 통해 제거한다.

 

class Animal{
	String name;
}

class Tiger extends Animal{}
class Lion extends Animal{}
class Pig extends Animal{}
하지만 추상 클래스는 스스로 객체화 할 수 없다!!

abstract class Animal 

//Compile Error!!
Animal a = new Animal();

 

'JAVA' 카테고리의 다른 글

[JAVA] GUI 스크롤바(RGB)  (0) 2020.09.20
[JAVA] GUI(AWT)  (0) 2020.09.16
[JAVA] this  (0) 2020.09.14
[JAVA] 생성자 오버로딩  (0) 2020.09.11
[JAVA] 클래스와 객체 -1  (0) 2020.09.08

객체(인스턴스)자신의 참조(번지)를 가지고 있는 키워드이다.

힙 영역에 생성되어있는 객체를 이 객체 위치를 스택에 생성되는 참조 변수가 힙 영역의 객체의 위치를 가지는데 

이 this는 스택에 생성되는것이 아니라 힙 영역의 객체 내부에 생성된다.

 

this는 객체 내부에서 인스턴스 멤버임을 명확히 하기 위해 this.를 붙일 수 있다.

 

Car(String model){ 	   //생성자 
	this.model = model;  //객체가 가지고 있는 필드! 
}

void setModel(String model){  //메서드 
	this.model = model;   //메서드의 매개변수 이름과 필드명이 동일할 경우 this.을 사용
}

//this. 키워드를 사용하여 객체의 필드나 객체의 메서드의 접근 가능!
this.fieldName
this.method();

즉,  this.를 사용하여 객체에 있는 필드나 객체에 있는 메서드에 접근하여 사용할 수 있는 키워드이다.

 

 

'JAVA' 카테고리의 다른 글

[JAVA] GUI(AWT)  (0) 2020.09.16
[JAVA] 추상클래스  (0) 2020.09.14
[JAVA] 생성자 오버로딩  (0) 2020.09.11
[JAVA] 클래스와 객체 -1  (0) 2020.09.08
[JAVA] 메소드-3  (0) 2020.09.07

자바에서는 다양한 방법으로 객체를 생성할 수 있도록 생성자 오버로딩(Overloading)을 제공한다.

생성자 오버로딩이란 매개 변수를 달리하는 생성자를 여러 개 선언하는 것을 말한다.

즉, 매개 변수의 형식을 가지고 있는 메소드를 여러 개로 정의할 수 있는 방법이다.

 

만약 기본 생성자가 없는 상태라면 생성자 오버로딩이 불가능하고 생성자 오버로딩 시 매개 변수, 타입, 선언된 순서,

가 기존 생성자와 똑같을 경우 매개 변수 이름만 바꾸는 것은 생성자 오버로딩이라고 볼 수 없다.

//오버로딩이 아님!!
Car(String model, String color){...}
Car(String color, String model){...}

 

 

class Car {
	String company = "현대";
	String model;
	String color;
	int maxSpeed;
	
	//생성자 1
	public Car() {
		
	}
	//생성자 2
	public Car(String model) {
		this(model, "은색", 250);
	}
	//생성자 3
	public Car(String model, String color) {
		this(model, color, 250);
	}
	
	//생성자 4
	Car(String model, String color, int maxSpeed){
		this.model = model;
		this.color = color;
		this.maxSpeed = maxSpeed;
	}
	
	
}

 생성자가 오버로딩이 되어 있을 경우 , new 연산자로 생성자를 호출할 때 제공되는 매개 변수의 값과 타입과

수에 의해 호출될 생성자가 결정된다. 이렇게 변수의 타입과 개수 그리고 순서를 달리하여 생성자 오버로딩을

한 예 이다.

 

다음은 오버로딩된 생성자를 다른 클래스에서 객체를 생성하는 방법이다.

 

public class CarExample {

	public static void main(String[] args) {
		
		//생성자 1선택
		Car car1 = new Car();
		System.out.println("car1.company : " + car1.company);
		System.out.println();
		
		//생성자 2선택
		Car car2 = new Car("그랜저");
		System.out.println("car2.company : " + car2.company);
		System.out.println("car2.model : " + car2.model);
		System.out.println();

		//생성자 3선택
		Car car3 = new Car("아반떼", "White");
		System.out.println("car3.company : " + car3.company);
		System.out.println("car3.company : " + car3.model);
		System.out.println("car3.company : " + car3.color);
		System.out.println();

		//생성자 4선택
		Car car4 = new Car("산타페", "Black", 250);
		System.out.println("car4.company : " + car4.company);
		System.out.println("car4.company : " + car4.model);
		System.out.println("car4.company : " + car4.color);
		System.out.println("car4.company : " + car4.maxSpeed);
		System.out.println();

		
	}

}

'JAVA' 카테고리의 다른 글

[JAVA] 추상클래스  (0) 2020.09.14
[JAVA] this  (0) 2020.09.14
[JAVA] 클래스와 객체 -1  (0) 2020.09.08
[JAVA] 메소드-3  (0) 2020.09.07
[JAVA] 메소드-2  (0) 2020.09.07

*클래스(class)

- 객체를 정의해 놓은 것 -> 객체를 생성하기 위한 템플릿(Template)

- 객체의 구성 및 생성에 쓰임.

 

 

 

*객체(object) 

- 실생활에 존재하는 것들을 모두 표현함.

- 예를들어 실제로 존재하는 자동차, 자전거, 책, 사람 등 모두 객체가 될 수 있다.

- 속성(특성)과 기능으로 구성.

 

*객체지향이란

-사물이나 개념을 "속성과 기능을 가진 객체"로 모델링하고, 이들간의 관계를 정의함.

(Self-contained Component 스스로 존재하는 자)

 

*자바에서의 객체지향 3단계

1)객체 모델링 : 프로그래밍 하고자 하는 객체의 속성과 필요한 기능을 정리한다.

2)클래스 정의 : 객체를 실제로 사용하기 위해서, 클래스라는 형태로 객체를 표현한다.

3)객체 생성과 사용 : 정의돈 클래스를 이용해서, 메모리상에 객체(Object)를 생성하고, 사용한다.

 

 

표현)

<클래스>

[접근제어자] class 클래스명 {
	변수, 생성자, 메소드를 정의함

}

<객체>

[참조형] 참조변수명 = new [클래스명](); 

	class A{

}
	A a = new A();
    
  

 

여기서 new[클래스명](); 으로도 객체 생성이 가능하지만 데이터를 담는 그릇(타입)이 있어야 한다.
즉, A는 실제 데이터를 담는게 아니라 주소를 담고있다.

 

 

본 클래스에서 객체를 생성

public class ClassEx{

	public static void main(String[] args){
    	ClassEx obj = new ClassEx(); 
    }
 }

                     

 

 

'JAVA' 카테고리의 다른 글

[JAVA] this  (0) 2020.09.14
[JAVA] 생성자 오버로딩  (0) 2020.09.11
[JAVA] 메소드-3  (0) 2020.09.07
[JAVA] 메소드-2  (0) 2020.09.07
[JAVA] 메소드  (0) 2020.09.07

+ Recent posts