IT/JAVA (17.12.18~)

18일 JAVA(18)

만두토끼 2018. 1. 12. 16:19

1. 배치관리자: layout

=> Container의 컴포넌트들을 배제하는 방법

=> Container의 setLayout(Layout 객체)를 이용해서 설정



1) FlowLayout

=> 컴포넌트들을 위에서부터 순서대로 배치

=> Panel의 기본 레이아웃


2) Border Layout 

=> 5개의 영역으로 나누어서배치

=> North, East, West, South, Center

=> 하나의 영역에 1개의 컴포넌트만 배치가능

=> Frame 의 기본 레이아웃 

=>add를 할 때 위치와 Component를 같이 대입해서 배치

=>위치를 생략하면 Center

=>영역에 아무런 Component도 배치되지 않으면 영역을 차지할 수 있는 다른 영역이 같이 차지합니다.

=>하나의 영역에 하나의 Component만 배치 가능하면 배치된 Component는 영역에 가득 채워집니다.



3) Null

=> 위치와 크기 직접 설정

=> Frame의 기본 레이아웃

=> 배치할때 add("위치", 컴포넌트)

=> 비어있는 영역은 채운 영역이 차지


4) GridLayout 

=> 격자 레이아웃

=>GridLayout 객체를 만들 때 행과 열 수를 대입해서 생성

=>각 셀에 순서대로 하나씩 배치됩니다.

=>셀을 가득 채워서 배치되면 처음 만들 때 설정한 행과 열 수보다 더 많은 Component가 배치되면 자동으로 행과 열의 개수가 늘어납니다.


5) CardLayout

=> 겹쳐서 배치



2. 클래스나 인터페이스를 상속한 객체 (클래스:추상 클래스)

1) 클래스를 생성해서 객체 만들기

- 클래스인 경우

public class ClassEx extends 클래스이름 {

내용

}

ClassEx 변수이름 = new ClassEx( ); 


- 인터페이스인 경우

public class ClassImpl implemetns 인터페이스이름 {

내용

}



2) 클래스를 생성하지 않고 객체 만들기

클래스 이름이나 인터페이스 이름 변수 = new 클래스이름이나인터페이스이름( ){


};




3. Java AWT & Swing & Android의 이벤트 처리

=>Component객체.add이벤트Listener(이벤트Listener e)

Component객체에 이벤트가 발생하면 e에 대입된 객체의 메소드가 이벤트 처리를 수행합니다.

이렇게 이벤트를 받은 객체가 이벤트를 처리하지 않고 다른 객체가 처리하는 것을 delegete(위임)이라고 합니다.


Button을 눌렀을 때의 이벤트는 Action 이벤트 입니다.


Button 의 Click 이벤트 - Action addActionListenr(ActionListener a) 

Button btn = new Button("버튼");




4. ScrollPane

=>배치되는 자식 컨트롤의 크기가 부모 컨테이너보다 클 때 자식 컨트롤을 배치하기 위한 컨트롤

=>GUI 프로그래밍에서 자식이 부모의 크기보다 크면 자식은 부모의 크기만큼만 보여지게 되는데 이 때 스크롤 바를 이용해서 자식의 보이지 않는 부분을 보이게 해주어야 합니다.

=>AWT 에서는 이 때 사용하는 컨트롤이 ScrollPane이며 ScrollPane 위에는 하나의 컴포넌트만 배치해야 합니다.




5. Canvas

=>영역만 차지하는 객체로 주로 그림을 출력할 때 사용




6. 메뉴

1) MenuBar: Frame에 부착하는 메뉴 표시줄

2) Menu: MenuBar에 부착하는 메뉴 항목들의 모임

3) MenuItem: Menu에 배치되는 실제 메뉴 항목

4) ChecboxMenuItem: MenuItem 옆에 체크박스가 있는 것




7. FileDialog

=>파일 열기 및 저장 대화상자




8. Color

=>색상

=>static 변수로 만들어져 있는 것을 사용해도 되고 직접 생성자를 호출해서 값을 대입해서 만들 수도 있습니다.




실습) 텍스트 "dd" 윈도우 화면에서 움직이기, 메뉴바 만들기

package java0112;


import java.awt.Button;

import java.awt.Color;

import java.awt.Frame;

import java.awt.Label;

import java.awt.Menu;

import java.awt.MenuBar;

import java.awt.MenuItem;

import java.awt.Panel;

import java.awt.TextField;


public class MyFrame extends Frame{

public MyFrame() {

Button bt1 = new Button("버튼");

//프레임에 부착 

add("Center",bt1);

TextField tf = new TextField(10);

tf.setEchoChar('&');

//메뉴만들기

MenuBar bar = new MenuBar();

Menu menu1 = new Menu("파일");

Menu menu2 = new Menu("편집");

MenuItem item1 = new MenuItem("열기");

menu1.add(item1);

bar.add(menu1);

bar.add(menu2);

setMenuBar(bar);

//Panel은 기본적으로 flow layout

Panel p = new Panel();

p.add(tf);

Label l = new Label("dd");

l.setBounds(100,100,50,100);

add(l);

Label label = new Label("안녕하세요");

Panel pa = new Panel();

pa.add(label);

add(pa);

label.setBackground(new Color(255,0,255));

//타이틀 설정

setTitle("나의 윈도우");

//처음 출력될 좌표와 크기 설정

setBounds(100,100,400,400);

//출력설정

setVisible(true);

int sign=10;

while(true) {

int x = l.getX();

int y = l.getY();

try {

Thread.sleep(1000);

}catch(Exception e) {

}

l.setBounds(x+sign, y, 50, 100);

}

}

}



package java0112;


public class Main1 {


public static void main(String[] args) {

new MyFrame();

}


}





실습) 클릭을 누르면 console 창에 알려주고 색상 클릭시 텍스트가 변경되며 종료 버튼 누르면 종료

package java0112;


import java.awt.Button;

import java.awt.Color;

import java.awt.Frame;

import java.awt.Label;

import java.awt.Panel;

import java.awt.TextField;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;


public class EventFrame extends Frame{

public EventFrame() {

Panel p = new Panel();

TextField tf = new TextField(20);

p.add(tf);

Label label= new Label("내용을 여기에 출력합니다.");

p.add(label);

Button btn1 = new Button("클릭");

Button red = new Button("빨강");

Button blue = new Button("파랑");

class ClassRed implements ActionListener{


@Override

public void actionPerformed(ActionEvent e) {

label.setForeground(Color.red);

}

}

class ClassBlue implements ActionListener{


@Override

public void actionPerformed(ActionEvent e) {

label.setForeground(Color.blue);

}

}

//버튼의 클릭 이벤트 처리는

//addActionListener(java.awt.event.ActionListener l)

//를 호출하면 l이 처리됩니다.

class ClassImpl implements ActionListener {


@Override

public void actionPerformed(ActionEvent e) {

System.out.println(("버튼을 눌렀습니다."));

}

}

ClassImpl obj = new ClassImpl();

ClassRed obj1 = new ClassRed();

ClassBlue obj2 = new ClassBlue();


btn1.addActionListener(obj);

red.addActionListener(obj1);

blue.addActionListener(obj2);


p.add(btn1);

p.add(red);

p.add(blue);

Button btn2 = new Button("종료");

class ClassImpli implements ActionListener{


@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

System.exit(0);

}

}

ClassImpli ob2 = new ClassImpli();

btn2.addActionListener(ob2);

p.add(btn2);

add(p);

setTitle("이벤트 처리");

setBounds(100,100,400,300);

setVisible(true);

}

}



package java0112;


public class EventMain {


public static void main(String[] args) {

new EventFrame();

}


}







'IT > JAVA (17.12.18~)' 카테고리의 다른 글

20일 JAVA(20)  (0) 2018.01.16
19일 JAVA(19)  (0) 2018.01.16
17일 JAVA(17)  (0) 2018.01.11
16일 JAVA(16)  (0) 2018.01.10
15일 JAVA(15)  (0) 2018.01.10