반응형
~~이후~~
*JFC
*Event
*Exception Handling
*IO Stream
*Network
(미니 프젝-1주일->코드리뷰)
*Thread
*JDBC
(전후로Test)
(project->한달)
↓↓↓↓
웹
*JFC*
*AWT
*Component
*LayoutManager
*JFC*
*AWT
-
자동배치(알아서 들어간다.)
-
BorderLayout, FlowLayout, GridLayout,GridBagLayout, CardLayout
-
BorderLayout
-
Frame의 기본 Layout
-
고유크기가 무시되고 배치되는 영역의 크기만큼 변경된다.
-
add(배치되는 위치, 컴포넌트)
-
하나의 영역에 하나의 컴포넌트만 배치된다.
-
Center를 제외한 나머지가 배치되지 않았을때 Center가 가득차게 배치된다.
-
선점) SetLayout(new BorderLayout()); <프레임에 사용할 때에는 Set이 필요가 없다.
-
borderLayout : Non visual Component대표적ex) 메모장
-
FlowLayout
-
Container Component의 기본 Layout(Panel)
-
컴포넌트가 배치되는 순서대로 나열된다.
-
컴포넌트의 고유크기로 배치된다.
-
윈도우의 크기가 변경되면(줄거나 늘면) 컴포넌트의 위치가 변경된다.
-
설정) setLayout(new FlowLayout());
-
GridLayout
-
격자 레이아웃
-
<어디의 기본레이아웃은 아니고,
-
행과 열로 구성되는 Layout <행과 열 배열 : 2차원 배열 (의 구조를 갖는 것(?)=>Map)
-
모든 행에서 열의 크기가 동일하다. (배치되는 Component의 크기가 동일하다.)
-
설정) setLayout(new GridLayout(행의 수, 열의 수)); //<맞지않으면 알아서 바꾸어준다.
-
배치되는 컴포넌트의 수가 설정한 행,열의 수와 일치하지 않으면 설정이 변경되어 컴포넌트가 배치된다.
-
<모든행의 크기가 똑같이 나온다
-
GridBagLayout
-
행마다 열의,갯수 크기가 다른 Layout
-
CardLayout
-
Container Component에만 선정하는 Layout
-
한정적인 공간에서 여러 panel을 교체하여 보여줄 때 사용.
-
사용상의 편의성
-
개발자가 원하는 위치에 Component를 배치할 수 없다.
-
<수동배치시 원하는 위치에 마음대로 배치할 수 있다.
-
수동 배치
-
Component를 개발자가 좌표를 설정하여 원하는 위치에 배치하는 것.
-
장)복잡한 디자인이 가능해진다.
-
단)개발자가 크기와 위치를 설정하게되므로 코드의 복잡도가 상승.
-
배치관리자를 해제한 후 배치를 시작.
-
<setLayout으로 생성하던..배치관리자를 해지하려면..
-
<new 를 썻다는것은 heap의 주소를 참조했다는것으로 heap의 주소가 없다는것을 표현 하려면 null을 넣으면 된다.
-
setLayout(null); <new 가 들어간곳에는 null이 들어갈 수 있다.
-
컴포넌트의 좌표 설정(배치되는 위치) : Component class에 존재.
-
-
<컴포넌트에 들어있는 setLacation을 사용하는것. (상속의 장점=>코드의 재사용성) 모든자식은 이기능을 사용할 수 있다.
-
lbl.setLocation(x, y);
-
컴포넌트의 크기 설정 : Component의 부모에 있다. (상속)
-
setSize(w,h);
-
//<빼먹는 경우가 종종 발생해서 합친 method를 생성함.
-
setBounds(x,y,w,h); //<덜빼먹는다
-
<다 컴포넌트에 있어 모두 수동배치가 가능한것.
public class Test extends Frame{
public Test(){
Button btn = new Button("버튼");
btn.setLocation(100,150); //java.awt.window객체내의 좌표.
btn.setSize(80,20);
setLayout(null); //<안그러면 기본인 borderLayout이 되어버림
add(btn);
//setLocation(100,200); //Windows OS 내의 좌표(아예 다르다.)
//=>setLocation(100,200); //윈도우의 setLocation은 윈도우를 띄우기 위한 위치로서 os창에 window를 잡아 모니터의 0.0좌표부터 잡는다.
//overriding 해 부모에서 제공하는 method를 나에게 맞추어서 사용.
//setSize();
}//Test
}//class
<* Container Component :
<panel은 FlowLayout으로 BorderLayout의 North자리에 panel(일반컴포넌트를 가진다.)을 넣어 Label, TextField, Button 3가지를 넣어본다.
package day1210;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* Container Component :
* 일반컴포넌트와 Container컴포넌트를 저장할 수 있는 Component의 사용.
* @author owner
*/
//1.Window Component상속
public class UsePanel extends Frame{
public UsePanel() {
super("Container Component 사용");
//2.Component 생성
Label lblName=new Label("이름");//대상(데이터형)+일=>헝가리안네이밍
TextField tfName=new TextField(20);
Button btnAdd=new Button("추가");
Button btnClose=new Button("종료");
TextArea taDisplay=new TextArea();
//일반컴포넌트를 배치할 수 있는 컨테이너 컴포넌트를 생성=>Panel
Panel panelNorth=new Panel(); //FlowLayout
//생성된 컨테이너 컴포넌트에 일반 컴포넌트 배치
panelNorth.add(lblName);
panelNorth.add(tfName);
panelNorth.add(btnAdd);
panelNorth.add(btnClose);
//3.배치관리자 설정
setLayout(new BorderLayout());
//4.배치 BorderLayout특징 :하나의 지역에는 하나의 컴포넌트만 저장가능.
add("North",panelNorth);//생성만되었고 일반컴포넌트 배치했을때 등장
// add("North",lblName);
// add("North",tfName);
// add("North",btnAdd);
// add("North",btnClose);
add("Center",taDisplay);
//5.윈도우 크기 설정
setBounds(200,150,400,250);
//6.사용자에게 보여주기
setVisible(true);
//윈도위 종료 이벤트 처리
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
dispose();
}//windowClosing
});//addWindowListener
}//UsePanel
public static void main(String[] args) {
new UsePanel();
}//main
}//class
*Menu만들기
-
<Menu,bar,item
-
MenuBar, Menu, MenuItem으로 구성.
-
(눈에 안보이는?)맨 상단에 MenuBar공간이 존재(?)
-
파일,편집,보기...하나를 Menu라고 하고, 상세 내보내기 파일첨부,,,등을 MenuItem이라고 한다.
-
1.MenuBar생성
-
MenuBar mb = new MenuBar();
-
2.Menu생성
-
Menu m = new Menu("파일");
-
3.MenuItem 생성
-
<Menu에 붙는다.
-
MenuItem mi = new MenuItem("내보내기");
-
4.생성된 MenuItem을 Menu에 배치
-
m.add(mi);
-
m.add(mil);
-
5.Menu를 MenuBar에 배치(넣어준다.)
-
mb.add(m);
-
mb.add(m1);
-
<기존의 add는 다받을수 있었으나 menu의 add는 한정되어 menu면 menu 딱 명확하게 받을수 있다. (상속?)
-
6.MenuBar를 배치
-
setMenuBar(mb);
-
<메뉴가 메뉴를 가지면 하위메뉴를 가지게 된다.
*색변경
-
<배경색, 전경색(글자색?) 2가지
-
바닥색(배경색) : 모든 컴포넌트 가능.(부모 class에 있는것.)
-
<awt,Swing 둘다 가능
-
<추상클래스 아니고 생성자가지니까 객체생성 가능
-
Color.white
-
Color.WHITE <둘다 가능. 단어의 한계로 모든색을 줄수 없다.
-
: field 를 사용하면 다양한 색을 설정할 수 없다.
-
new Color(0x000000~0xFFFFFF)로 표현
-
<r,g,b color(16진수로 색을 표현)을 받아 수를 넣어 색을 표현한다. (0x000000)(0~F)
-
설정) setBackGround(Color);
-
글자색(전경색) : 모든 Label을 가질수 있는 component에서 다 사용가능.
-
setForeground(Color)
*글꼴
-
Font
-
=>글꼴 설정(자바의 기본 폰트가 5가지 정도 되는데, serif 체,,그중4가지가 비슷해보임...)
-
java.awt.Font
-
Font f = new Font("글꼴",style,size);
-
Font 설정 : setFont(f); <부모에 존재...어디서나 쓸수있기 때문..?
*API 봤던 순서.
field
Construct
method
inhritence method
<<숙제>>
package day1210;
import java.awt.Button;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
@SuppressWarnings("serial")
public class Work25 extends Frame{
public Work25() {
super("자동 배치-숙제1");
//생성
Label lblNorth= new Label("학 생 관 리");
Label lblName= new Label("이름");
Label lblAge= new Label("나이");
Label lblTel= new Label("전화번호");
Label lblGen= new Label("성별");
TextField tfName=new TextField();
TextField tfAge=new TextField();
TextField tfTel=new TextField();
CheckboxGroup cg = new CheckboxGroup();
//CheckboxGroup을 설정하면 Radio Button이 생성된다.
Checkbox rb1 = new Checkbox("남자",false,cg);
Checkbox rb2 = new Checkbox("여자",true,cg);
TextArea taMemo=new TextArea();
Button btnadd=new Button("추가");
Button btnupdate=new Button("변경");
Button btndelete=new Button("삭제");
Button btnexit=new Button("종료");
//일반 컴포넌트배치
Panel panelsusub=new Panel();
panelsusub.setLayout(new GridLayout(1,2));
panelsusub.add(rb1);
panelsusub.add(rb2);
Panel panelCenSub=new Panel();
panelCenSub.setLayout(new GridLayout(4,1));
panelCenSub.add(lblName);
panelCenSub.add(tfName);
panelCenSub.add(lblAge);
panelCenSub.add(tfAge);
panelCenSub.add(lblTel);
panelCenSub.add(tfTel);
panelCenSub.add(lblGen);
panelCenSub.add(panelsusub);
Panel panelCenter=new Panel();
panelCenter.setLayout(new GridLayout(1, 2));
panelCenter.add(panelCenSub);
panelCenter.add(taMemo);
Panel panelSouth=new Panel();
panelSouth.add(btnadd);
panelSouth.add(btnupdate);
panelSouth.add(btndelete);
panelSouth.add(btnexit);
Panel panelNorth=new Panel();
panelNorth.add(lblNorth);
//배치
add("North",panelNorth);
add("South",panelSouth);
add("Center",panelCenter);
setSize(400, 300);
setVisible(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
dispose();
}
});
}//Work25
public static void main(String[] args) {
new Work25();
}//main
}//class
package day1210;
import java.awt.Button;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Label;
import java.awt.List;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
@SuppressWarnings("serial")
public class Work25_2 extends Frame{
public Work25_2() {
super("수동 배치-숙제2");
//컴포넌트 생성
Label lblFont=new Label("글꼴");
TextField tfFont=new TextField();
List listFont = new List();
listFont.add("Dialog");
listFont.add("Serif");
listFont.add("SansSerif");
listFont.add("Monospaced");
listFont.add("DialogInput");
// TextArea taFont=new TextArea("Dialog\n"
// + "Serif\n"
// + "SansSerif\n"
// + "Monospaced\n"
// + "DialogInput");
Label lblStyle=new Label("글꼴스타일");
TextField tfStyle=new TextField();
List listStyle = new List();
listStyle.add("일반");
listStyle.add("굵게");
listStyle.add("기울임꼴");
listStyle.add("굵게기울임꼴");
// TextArea taStyle=new TextArea("일반\n"
// + "굵게\n"
// + "기울임꼴\n"
// + "굵게기울임꼴");
Label lblSize=new Label("크기");
TextField tfSize=new TextField();
List listSize=new List();
String num = null;
for(int i=2; i<81; i++) {
if(i<=10) {
if(i%2==0) {
num=String.valueOf(i);
listSize.add(num);
}
}else {
num=String.valueOf(i);
listSize.add(num);
}//end else
}//end for
Label lblSample=new Label("보기");
TextField tfSample=new TextField("AaBbYyZz");
tfSample.setFont(new Font("Dialog",Font.BOLD,15));
Button btnCheck=new Button("확인");
Button btnCancel=new Button("취소");
//배치관리자 해지
setLayout(null);
lblFont.setLocation(20,35);//배치좌표
lblFont.setSize(80,20);//배치크기
add(lblFont);//Frame에 배치
tfFont.setLocation(20,70);//배치좌표
tfFont.setSize(100,25);//배치크기
add(tfFont);//Frame에 배치
listFont.setLocation(20,100);//배치좌표
listFont.setSize(100,100);//배치크기
add(listFont);//Frame에 배치
lblStyle.setLocation(140,35);//배치좌표
lblStyle.setSize(80,20);//배치크기
add(lblStyle);//Frame에 배치
tfStyle.setLocation(140,70);//배치좌표
tfStyle.setSize(100,25);//배치크기
add(tfStyle);//Frame에 배치
listStyle.setLocation(140,100);//배치좌표
listStyle.setSize(100,100);//배치크기
add(listStyle);//Frame에 배치
lblSize.setLocation(260,35);//배치좌표
lblSize.setSize(80,20);//배치크기
add(lblSize);//Frame에 배치
tfSize.setLocation(260,70);//배치좌표
tfSize.setSize(100,25);//배치크기
add(tfSize);//Frame에 배치
listSize.setLocation(260,100);//배치좌표
listSize.setSize(100,100);//배치크기
add(listSize);//Frame에 배치
lblSample.setLocation(140,220);//배치좌표
lblSample.setSize(100,25);//배치크기
add(lblSample);//Frame에 배치
tfSample.setLocation(140,250);//배치좌표
tfSample.setSize(100,50);//배치크기
add(tfSample);//Frame에 배치
btnCheck.setLocation(200,350);//배치좌표
btnCheck.setSize(70,25);//배치크기
add(btnCheck);//Frame에 배치
btnCancel.setLocation(290,350);//배치좌표
btnCancel.setSize(70,25);//배치크기
add(btnCancel);//Frame에 배치
setSize(400, 400);
setVisible(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
dispose();
}
});
}//Work25_2
public static void main(String[] args) {
new Work25_2();
}//main
}//class
반응형