JAVA2 - Day3 - anonymous, Inner class, FlowLayout

<anonymous>
package com.annonymous;

public class Main {

public static void main(String[] args) {
//2- 4 anonymous class , 익명 클래스
// - 이름이 없다.
// - 클래스의 선언과 객체의 생성을 동시에 하는 클래스
// - 일회용, 단 하나의 객체만 생성.
// - 단하나의 클래스를 상속받거나 또는 하나의 인터페이스를 구현.


//Shape클래스를 상속받는 이름없는 클래스
// -> 객체생성!! (Shape rect)
Shape rect = new Shape() {
@Override
void draw() {
info();
System.out.println("Rect");

}
void info() {
System.out.println("ㅎㅎ");
}
};
rect.draw();
// rect.info(); //접근이 안됨.

Shape circle = new Shape() {
@Override
void draw() {
System.out.println("Circle");

}
};
circle.draw();

System.out.println("----------------------------------");
//Monster 인터페이스를 구현하는 익명클래스
Monster cat = new Monster() {
@Override
public void attack() {

System.out.println("cat 공격!");

}
@Override
public void move() {

System.out.println("cat 이동!");

}
};

cat.attack();
cat.move();
}


}
------------------------------------------------------------------------------------
package com.annonymous;

public interface Monster {
void attack();
void move();
}
------------------------------------------------------------------------------------
package com.annonymous;

public abstract class Shape {
int x,y;
abstract void draw();
}
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
<Inner class>
package com.inner;

//Inner 클래스
// - 중첩 클래스
// - 하나의 클래스 내부에 또 다른 클래스가 내포되어있는 상태
// -> 클래스 안에 선언된 클래스

class Outer{ //외부클래스
//속성과 기능
class Inner{ //내부클래스
//하나 이상 가능
// Inner클래스에서 Outer클래스의 멤버에 접근 가능 O 
// Outer클래스에서 Inner클래스의 멤버에 접근 불가능 X
}
}


public class Student {
static String school="코리아초등학교"; //static변수
String name; //instance변수
int math,eng,kor;
public Student(String name, int math, int eng, int kor) {
//local변수
this.name=name;
this.math=math;
this.eng=eng;
this.kor=kor;
}
class InstanceClass{
//1.instance inner class
// - 외부 클래스의 멤버변수 위치에 선언
// - instance 변수처럼 다뤄진다
int sum;
void avg() {
sum=math+eng+kor; //외부클래스 멤버 접근 가능 O
System.out.println(school);
System.out.println(name+"의 평균은 "+(sum/3.0)+"입니다");
}
}
InstanceClass instance=new InstanceClass();
static class StaticClass{
//2.static inner class
// - 외부 클래스의 멤버변수 위치에 선언
// - static변수처럼 다뤄진다
void info() {
//System.out.println(name); //외부클래스 인스턴스 멤버 X
System.out.println(school); //외부클래스 static 멤버 O
}
}

public void grade() {
int total=3; //local변수(지역변수)
class LocalClass{
//local inner class
// - 외부클래스의 메서드 영역 안에 선언
// - local 변수처럼 다뤄진다
// -> 해당 메서드 호출시 생성, 수행 종료시 소멸
int sum;
void avg() {
sum=eng+math+kor;
System.out.println(name+"의 평균은 "+(sum/total));
}
}
LocalClass l1=new LocalClass();
l1.avg();
}
}
------------------------------------------------------------------------------------
package com.inner;

public class Main {
public static void main(String[] args) {
Student s1=new Student("홍길동", 89, 78, 56);
s1.instance.avg();
Student.InstanceClass i1=s1.new InstanceClass();
i1.avg();
System.out.println("---------------------------");
Student.StaticClass i2=new Student.StaticClass();
i2.info();
System.out.println("-----------------------------");
s1.grade();
}
}
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
<layout>
package com.layout;

public class Main {
public static void main(String[] args) {
MyFrame my=new MyFrame("AWT",300,300);  //창(Window)
my.setVisible(true);
}
}
------------------------------------------------------------------------------------
package com.layout;

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

public class MyFrame extends Frame{
Label id,pw,pwck; //글자
TextField idInput,pwInput,pwckInput; //(한줄)입력창
Label check;
Button submit; //버튼
public MyFrame(String title, int width, int height) {
//title
setTitle(title);
//size
setSize(width, height);
//window event
MyWindow win=new MyWindow();
addWindowListener(win);
//layout
init();
//Key event
// -> pwInput의 데이터와 pwckInput데이터를 비교하여
// 같으면  check Label에 동일한 패스워드 라는 글자를 출력하고
// 아니라면  동일하지 않은 패스워드 라고 출력하세요
MyEvent evt=new MyEvent();
evt.setPwInput(pwInput);
evt.setCheck(check);
pwckInput.addKeyListener(evt);
}
public void init() {
//LayoutManager
// - FlowLayout
// - 설정한 정렬 정보(왼쪽,오른쪽,가운데)대로 컴포넌트들을 정렬
FlowLayout flow=new FlowLayout(FlowLayout.CENTER);
setLayout(flow);
id=new Label("ID"); 
add(id);
id.setBackground(Color.GRAY); //new Color(r,g,b)
id.setPreferredSize(new Dimension(50, 30)); //Dimension
idInput=new TextField();
add(idInput);
idInput.setPreferredSize(new Dimension(200, 30));
pw=new Label("PW");
add(pw); pw.setPreferredSize(new Dimension(50, 30));
pwInput=new TextField();
add(pwInput); pwInput.setPreferredSize(new Dimension(200,30));
pwck=new Label("CK");
add(pwck); pwck.setPreferredSize(new Dimension(50, 30));
pwckInput=new TextField();
add(pwckInput); pwckInput.setPreferredSize(new Dimension(200,30));
check=new Label();
add(check); check.setPreferredSize(new Dimension(255, 20));
submit=new Button("회원가입");
add(submit); submit.setPreferredSize(new Dimension(255, 30));
}
}
------------------------------------------------------------------------------------
package com.layout;

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

public class MyWindow extends WindowAdapter{
@Override
public void windowClosing(WindowEvent e) {
System.exit(0); //프로그램 종료
}
}
------------------------------------------------------------------------------------
package com.layout;

import java.awt.Label;
import java.awt.TextField;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class MyEvent implements KeyListener{
TextField pwInput;
public void setPwInput(TextField pwInput) {
this.pwInput=pwInput;
}
Label check;
public void setCheck(Label check) {
this.check=check;
}
@Override
public void keyTyped(KeyEvent e) {
//키보드 버튼이 입력될때
}
@Override
public void keyPressed(KeyEvent e) {
//키보드 버튼을 누를때
//System.out.println(e.getKeyCode());
}
@Override
public void keyReleased(KeyEvent e) {
//키보드 버튼을 뗄때
TextField pwckInput=(TextField)e.getSource();
//System.out.println(pwInput.getText());
String s1=pwInput.getText();
String s2=pwckInput.getText();
if(s1.equals(s2)) { 
check.setText("동일한 패스워드입니다");
//System.out.println("동일한 패스워드입니다");
}else {
check.setText("동일하지 않은 패스워드입니다");
//System.out.println("동일하지 않은 패스워드입니다");
}
}
}


댓글

이 블로그의 인기 게시물

11 - Scanf

JAVA - Day3 - Scanner, if, if else

JAVA - Day5 - Array,Random