기록하는 개발자

자바 #5 JAVA GUI 본문

JAVA

자바 #5 JAVA GUI

밍맹030 2020. 1. 5. 14:55
728x90

JAVA GUI

java.awt 패키지의 클래스이용

-만들기 쉬다

-느리고 무겁다

 

javax.swing 패키지의 클래스 이용

-만들기가 힘듬

-빠르고 가벼움.

 

MVC 패턴 : Model-View-Controller

- Model : 데이터를 가져와 어떤 작업을 처리하거나 처리한 작업을 저장

- View : 데이터를 보여주는 역할

- Controller : 뷰와 모델 사이의 흐름제어

 

컴포넌트

- 화면을 구성하는 부품

- 컨테이너에 포함되어야 비로소 화면에 출력될 수 있는 GUI 객체

- 모든 GUI 컴포넌트의 최상위 클래스 : java.awt.Component

- 스윙 컴포넌트의 최상위 클래스 : javax.swing.Jcomponent

 

컨테이너

-컴포넌트로부터 상속 받은 하나의 윈도우 영역을 의미

- 다른 컴포넌트를 포함할 수 있는 GUI 컴포넌트

- java.awt.Container를 상속받음

- 다른 컨테이너에 포함될 수 있음

- AWT 컨테이너 : Panel, Frame, Applet, Dialog, Window

- Swing 컨테이너 : JPanel JFrame, JApplet, JDialog, JWindow

- 최상위 컨테이너 : 다른 컨테이너에 속하지 않고 독립적으로 존재 가능

- 스스로 화면에 자신을 출력하는 컨테이너 : JFrame, JDialog, JApplet

- 모든 컴포넌트는 컨테이너에 포함되어야 비로소 화면에 출력 가능

자주 사용하는 AWT 패키지

- java.awt , java.awt.event

자주 사용하는 swing 패키지

- javax.swing, javax.colorchooser, javax.swing.event

import javax.swing.*;

public class MyFrame extends JFrame {

             MyFrame() {

                           setTitle("스윙 프레임 만들기"); //”스윙 프레임 만들기”를 타이틀로 하는 프레임

                           setSize(300,300);  //300*300 크기의 프레임이 만들어진다

                           setVisible(true);  //frame이 출력 되도록 true 입력

             }

             public static void main(String [] args) {  //Main을 클래스 내의 멤버로 작성하기

                           MyFrame mf=new MyFrame();

             }

} 

<스윙 프레임 예시>

 

 

import javax.swing.*;

import java.awt.*;

public class ContentPaneEx extends JFrame {      //jframe 상속해서 클래스 생성

     public ContentPaneEx() {

                   setTitle("ContentPane과 JFrame");       //title 설정

                   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //x누르면 꺼지게

                   Container contentPane = getContentPane();   

                  //getContentPane()를 통해 pane을 알아내 Container인 contentPane에 넣기

                   contentPane.setBackground(Color.ORANGE);   //배경색 오렌지

                   contentPane.setLayout(new FlowLayout());  //컨테이너의 레이아웃 설정

                   contentPane.add(new JButton("OK"));     //new jbutton “ok” 삽입

                   contentPane.add(new JButton("Cancel"));   //new jbutton “Cancel” 삽입

                   contentPane.add(new JButton("Ignore")) ;   //new jbutton “Ignore” 삽입

                   setSize(300, 150);          // jframe 크기 300*150으로 설정

                   setVisible(true);             // jframe 이 보이도록 true 설정

}

     public static void main(String[] args) {

                   new ContentPaneEx();  //객체 생성

     }

}

 

System.exit(); -->응용 프로그램 내에서 스스로 종료

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

-->종료 버튼 클릭 시 프레임을 닫고 응용 프로그램 종료

 

If ) 그냥 위 문구들 없이 종료 버튼을 누르면 화면만 사라지고 응용 프로그램은 종료되지 않은 상태이다.


Layout

-flowlayout : 들어오는 순서대로 배열

-borderlayout : 중앙과 상하좌우로 칸을 나눠 원하는 곳에 배열

-gridlayout : 전체를 일정 수의 칸으로 나눠 배열

-cardlayout : 겹치도록 배열(나중에 들어온게 맨 앞(?))

 

-컨테이너 생성 시에 디폴트로 배치 관리자를 설정 해준다.

-container.setlayout(layoutmanager lm); / lm을 새로운 관리자로 설정

 

ex1)

JPanel p = new JPanel();

p.setLayout(new BorderLayout()); //디폴트는 flowlayout

 

ex2)

Container c = frame.getConentPane(); // 컨텐트팬

c.setLayout(new FlowLayout());

 

FlowLayout

 

생성자

Flowlayout();

Flowlayout(int align);

Flowlayout(int align, int hGap, int vGap);

 

Align : 컴포넌트 정렬 방법

왼쪽 정렬 FlowLayout.LEFT/ 오른쪽 정렬 FlowLayout.RIGHT

중앙 정렬 FlowLayout.CENTER(디폴트)

hGap : 좌우 컴포넌트 사이의 수평 간격, 픽셀 단위. Default=5

vGap : 상하 컴포넌트 사이의 수직 간격, 픽셀 단위. Default=5

 

BorderLayout

생성자

Void add(Component comp, int index)

-comp : 컨테이너에 삽입되는 컴포넌트

-index : 컴포넌트 위치

동 : BorderLayout.EAST

서 : BorderLayout.WEST

남 : BorderLayout.SOUTH

북 : BorderLayout.NORTH

중앙 : BorderLayout.CENTER

 

c.setLayout(new BorderLayout(hGap, vGap));

-->c의 new borderlayout을 생성자로 생성하면서 gap 정해주기

 

GridLayout

 

생성자

GridLayout();

GridLayout(int rows, int cols)

GridLayout(int rows, int cols, int hGap,int vGap);

-rows : 그리드 행 수, 디폴트 1

-cols : 그리드 열 수, 디폴트 1

-hGap: 좌우 컴포넌트 사이의 수평 간격, 픽셀 단위. 디폴트 0

-vGap: 상하 컴포넌트 사이의 수직 간격, 픽셀 단위. 디폴트 0

 

배치 관리자가 없는 컨테이너

:컴포넌트의 크기나 위치를 개발자 임의로 결정하고자 하는 경우

JPanel p = new JPanel();

p.setLayout(null);

 

-컴포넌트의 절대 크기와 절대 위치 설정 -->프로그램 내에서 이루어져야 함

-컴포넌트 크기 설정 : component.setSize(int width, int height);

-컴포넌트 위치 설정 : component.setLocation(int x, int y);

-컴포넌트 위치와 크기 동시 설정  : component.setBounds(int x, int y, int width, int height);

 

import javax.swing.*;

import java.awt.*;

public class NullContainerEx extends JFrame {

             public NullContainerEx() {

                           setTitle("Null Container Sample");

                           setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                                                      Container c = getContentPane();

                           c.setLayout(null); /배치 관리자 삭제

                           JLabel la = new JLabel("Hello, Press Buttons!");/la 라벨 추가

                           la.setLocation(130, 50);             /라벨의 위치 설정

                           la.setSize(200, 20);        /라벨 사이즈 설정

                           c.add(la);           /컨테이너에 라벨 붙이기

                           for(int i=1; i<=9; i++) {

                                        JButton b = new JButton(Integer.toString(i));

//반복마다 새로운버튼 생성

                                        b.setLocation(i*15, i*15); /버튼 위치 i로 바꾸기

                                        b.setSize(50, 20);           /버튼 사이즈 설정

                                        c.add(b); // 버튼을 컨텐트팬에 부착

                           }

                           setSize(300, 200);

                           setVisible(true);

             }

             public static void main(String[] args) {

                           new NullContainerEx();

             }

}

 

728x90

'JAVA' 카테고리의 다른 글

자바 #7 기본적인 스윙 컴포넌트와 활용  (0) 2020.01.05
자바 #6 이벤트 처리  (0) 2020.01.05
자바 #4 컬렉션  (0) 2020.01.05
자바 #3 모듈과 패키지  (0) 2020.01.04
자바 #2 인터페이스  (0) 2020.01.04