본문 바로가기
인턴

[인턴 OJT 8일차] Java swing Jframe, Jpanel, Layout

by 리잼 2022. 12. 21.
반응형

1. Java의 GUI ( 그래픽 사용자 인터페이스 )

- 사용자가 편리하게 입출력 할 수 있도록 그래픽으로 화면을 구성

- 마우스, 키보드로 입력값을 받을 수 있도록 지원하는 사용자 인터페이스

 

자바 GUI의 특징

- 강력한 GUI 컴포넌트 제공

- 쉬운 GUI 프로그래밍

 

자바 GUI 프로그래밍 방법

GUI 컴포넌트 이용

- AWT 패키지와 Swing 패키지

- AWT

.java.awt package

- Swing

.java.swing package

- JavaFX

Java11에서 제거됨

GUI
설명
AWT
운영체제가 제공하는 자원을 이용해서 컴포넌트 생성
Swing
컴포넌트가 자바로 작성되어 있기 때문에 어떤 플랫폼에서도 일관된 화면 작성가능

Swing 컴포넌트 예시

    - JButton

    - JCheckBox

    - JRadioButton

    - JTextField

    - JPassewordField

    - JTextArea

    - JComboBox

    - JList

    - JProgeressBar

    - JTooTip

    - JScrollPane

    - JMenu

    - JDialog

    - JFrame

 

이 밖에도 JApplet, JTable, JTree, JEditorPane, JTextPane, JToolBar, JSplitPane, JTabbedPane 등

여러 가지의 컴포넌트가 있다.

 

Swing의 특징

- 스윙 GUI 컴포넌트

- 형식화 된 텍스트 입력이나 패스워드 필드 동작과 같은 복잡한 기능 제공

- 자바 2D API

- 그림이나 이미지, 애니메이션 기능을 제공

- 교체 가능한 Look-and-Feel 지원

- 데이터 전송

- 자르기, 복사, 붙이기, drag&drop 데이터 전송 기능 제공

 

대부분의 프로그램은 스윙 API중에서 아주 작은 부분 집합만을 사용한다.

따라서 대부분의 경우 두가지 패키지만 포함하면 된다

*javax.swing

*javax.swing.event

 

JFrame

- 기본적으로 타이틀, 최소화 버튼, 최대화버튼, 종료버튼 지원

- 기본적으로는 setVIsible(False) == true로 설정해줘야 보여짐

- 만드는 방법은 JFrame 객체 직접 생성 또는 JFrame 상속

- 종료 이벤트 처리의 기본값은 HIDE_ON_CLOSE ==false를 인수로 setVIsible 메서드를 호출하여 윈도우를 숨김

이것이 기본 작업이라 x를 눌러도 console로 확인하면 종료가 안되고 있는 것

- 종료 이벤트 처리는 setDefaultCloseOperation(EXIT_ON_CLOSE) 호출

JPanel

- 컴포넌트들을 그룹 별로 묶어서 처리할 때 사용하는 컨테이너

- 레이아웃을 여러개 만들어야 할 때 많이 사용됨

- Frame에 직접 붙이지 않고 Panel 이용

 

 

컨테이너와 컴포넌트

컨테이너

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

- 다른 컨테이너를 포함 할 수 있음

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

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

컴포넌트

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

- 다른 컴포넌트를 포함할 수 없는 순수 컴포넌트

- 모든 GUI 컴포넌트가 상속받는 클래스: java.awt.Compnent

- 스윙 컴포넌트가 상속받는 클래스: javax.swing.JComponent

 

간단한 GUI 만들기

GUI 작성 절차

1. 컨테이너 생성

2. 컴포넌트 추가

 

FrameTest.java

import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class FrameTest extends JFrame {

	// 생성자
	public FrameTest () {
		setSize(300, 300); // 크기 설정
		// 프레임 종료 버튼이 눌릴 때 프레임과 함께 종료시키는 방법
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
		setTitle("프레임 테스트"); // title 설정
		
		setLayout(new FlowLayout()); // 배치 관리자 설정
		JButton button = new JButton("버튼 1");
		
		// 컴포넌트 생성 및 추가
		this.add(button);
		setVisible(true);
		
	}
	
	
	public static void main(String[] args) {
		
		new FrameTest();

	}

}
2. 기초 컨테이너와 컴포넌트

Swing 클래스 계층구조

- Component

- 화면에 표시되어 사용자와 상호 작용하는 시각적인 객체를 나타냄

- Container

- 내부에 다른 컴포넌트를 추가할 수 있는 기능을 제공

- 이 클래스의 add()를 이용하면 컨테이너 안에 컴포넌트를 추가

- Window

- 경계선, 타이틀 바, 버튼을 가지고 있는 윈도우를 정의

- Frame

- 자바 GUI App의 기초(AWT)

- JFrame

- Frame 클래스를 스윙의 출시에 맞추어 변경

 

중요한 메서드

- setLocaion(x, y), setBounds(x, y, width, height), setSize(width, height) // 프레임 위치와 크기 설정

- setIconImage(IconImage) // 윈도우 시스템에 타이틀 바, 태스크 스위처에 표시할 아이콘을 알려줌

- setTitle() // 타이틀 설정

- setResizable(boolean) // 사용자가 크기를 조절할 수 있는지 설정

 

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class ContentPaneTest extends JFrame{

	public ContentPaneTest() {
		setTitle("ContentPane과 JFrame 예제");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Container contenPane = getContentPane(); 
		contenPane.setBackground(Color.blue); 	// 배경색 설정
		contenPane.setLayout(new FlowLayout()); // 컨텐트팬에 FlowLayout 배치관리자 설정
		
		contenPane.add(new JButton("OK")); 		// OK 버튼
		contenPane.add(new JButton("Cancel"));  // Cancel 버튼
		contenPane.add(new JButton("Ignoer"));		// Ignore 버튼
		
		setSize(300,150); // 화면 프레임 설정
		setVisible(true); // 화면 프레임 출력
	}
	
	public static void main(String[] args) {

		new ContentPaneTest();

	}

}
 
 

배치관리자

- 컨테이너에 부착되는 컴포넌트들의 위치와 크기를 결정한다.

- 하나의 컨테이너에는 반드시 하나의 배치 관리자를 가진다.

- 컴포넌트가 컨테이너로 들어오는 순간에 위치와 크기를 결정한다.

- 컨테이너의 크기가 변경되면 컨테이너 내부의 모든 컴포넌트들의 위치와 크기를 재조정한다.

배치 관리자의 종류

private FlowLayout flowLayout = new FlowLayout();
    //레이아웃을 설정하지 않으면 기본으로 설정되는 레이아웃
    //특정한 형태없이 쭉 나열 한다.
	private BorderLayout borderLayout = new BorderLayout();
	// 동서남북과 가운데 센터로 나뉘어져 있는 레이아웃
	private GridLayout gridLayout = new GridLayout();
	//바둑판 형태로 나뉘어져 사용되는 레이아웃
	//컴포넌트의 크기는 컨테이너의 크기에 자동으로 맞춰진다.
	private CardLayout cardLayout = new CardLayout();
	//화면의 전환을 할 때 사용 되어지는 레이아웃
 

GridBagLayout

GridBagLayout을 사용하여 add 하는 방식에 대한 설명

- 패널.add(붙일 컨텐츠, new GridBagConstraints(

grid x,

grid y, - 표시할 x, y좌표

gridwidth,

gridheight, - 표시할 사이즈

weight x,

weight y, - 가중치

anchor, - 기준점 (8방위 )

fill - 채우기 ( NONE, HORIZTAL, VERTICAL, BOTH )

Insets, - 주위 여백 ( 위쪽, 왼쪽, 아래쪽, 오른쪽 )

ipad x,

ipad y

));

 

 

 

반응형