국비지원학원/Java

37일차

초코맛 2018. 12. 18. 01:02
반응형
~~이후~~
*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





 

반응형

'국비지원학원 > Java' 카테고리의 다른 글

39일차  (0) 2018.12.19
38일차  (0) 2018.12.18
36일차  (0) 2018.12.10
35일차  (0) 2018.12.08
34일차  (0) 2018.12.06