일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 리액트
- React JS
- codesandbox
- 장고
- react firebase
- 리액트 훅
- design pattern
- 자바 공부
- websocket
- react hook
- 백준
- useEffect
- 컴퓨터 네트워크
- Java
- react
- useState
- 프로그래머스
- 자바스크립트
- 코딩테스트 고득점 Kit 완전탐색
- 프로그래밍 언어론
- 데이터모델링과마이닝
- 프로그래머스 자바
- vanillaJS
- 자바
- JavaScript
- 프로그래머스 완전탐색
- 코틀린
- 코딩테스트 고득점 Kit
- NextJS
- 디자인 패턴
- Today
- Total
기록하는 개발자
자바 #5 JAVA GUI 본문
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();
}
}
<스윙 프레임 예시>
|
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();
}
}
'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 |