Web develop/JAVA

[JAVA] 자바 GUI

ForA 2019. 4. 29. 21:48
728x90

TUI (Text User Interface)

  • 프로그램 실행을 Text에 의존해서 실행
  • ex) 메뉴에서 1을 누르면 추가, 2를 누르면 검색, 3을 누르면 종료.

AWT (Abstract Window Toolkit)

  • GUI(Graphic User Interface)환경을 구축하기위한 class들의 묶음 java.awt.*;
  1. Component : Menu, Button, Label, Choice, Checkbox, List TextField, TextArea, Scrollbar...

  2. Container : Component의 객체를 생성한 후에 그 객체를 배치한다.

    Object

                  | 
              Component    
                  | 
              Container 
                  | 
       ------------------------ 
      |                        | 
    Panel                   Window 
      |                        | 
    Applet                   Frame 

    FlowLayout BorderLayout (default layout)

Panel : display(x) , 한 영역에 두개 이상의 컴포넌트를 붙일때 사용.컴포넌트 속성을 지정하기위해 사용.-> 작은도화지Frame : display(o)-> 큰 도화지

  • Applet은 현재는 보안에 취약해서 안씀
  1. Event 처리: Component에 기능을 실제로 부여하는 것.

Container의 배치방법(LayoutManager)

: 컴포넌트를 컨테이너에 어떻게 위치시킬지 방법을 정의.

Frame f = new frame();
f.setLayout(new FlowLayout());
  • FlowLayout(가운데 정렬): 가운데를 기준으로 해서 Component들이 배치. (Frame크기에 따라 배치가 변경)
  • BorderLayout(방위정렬): 방위에 따라 사용자가 임의 배치 가능 (동,서,남,북, 중앙)
  • GridLayout(같은 크기 정렬, 행열표현 정렬): Container의 크기를 같은 크기로 나누어 Component를 붙인다.
  • CardLayout(같은 위치 정렬): 같은 위치에 여러개의 Component를 배치할 때 사용. 정리된 카드를 생각

 


GUI 예제

public class TextFieldAreaTest extends Frame {

    Button b1, b2;
    TextField tf1, tf2;
    TextArea ta;
    Label la;

    Panel southp,northp; //패널 선언. 한영역에 두개이상의 컴포넌트를 붙일때 사용

    public TextFieldAreaTest() {
        //상단 타이틀
        setTitle("TextFieldArea 테스트"); 

        //설정
        //new TextField(int columns); //columns=> 글자수가 들어가는 너비
        tf1 = new TextField("기본값",10);//상단 텍스트
        tf2 = new TextField(10);//하단 텍스트

        ta = new TextArea();
        la = new Label("파일이름:");

        //패널 설정
        southp = new Panel(); //컨테이너
        southp.setBackground(Color.pink);
        southp.setForeground(Color.red); //글자색
        southp.add(la);
        southp.add(tf2);
      //southp.setLayout(new FlowLayout());=> Panel 기본값은 FlowLayout        

        northp = new Panel();
        northp.setBackground(Color.green);
        northp.add(tf1);

        //setLayout(new BorderLayout()); => Frame의 기본값은 BorderLayout
        add("North", northp);
        add("Center", ta);
        add("South",southp);

        setSize(300, 300);
        setVisible(true);
    } 

    void onGui() {
//        tf1.getBackground();
    }

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

/*컬러를 지정하는 다른방법(rgb)*/
Color c = new Color(int red, int green, int blue);
//매개변수의 각 정수는 0~255 사이의 값 

Color c = new Color(255,0,0);
northp.setBackground(c);
northp.setBackground(new Color(255,0,0));