JAVA GUI 기초

robin Han·2022년 12월 12일

Study Java

목록 보기
1/3

GUI 목적

사용자에게 더욱 쉬운 인터페이스를 제공 하기 위해서 정보 제공

AWT

Abstract Windowing Toolkit

자바가 처음 나왔을때 부터 포함된 제일 기본적인 GUI 라이브러리 이다.

java.awt.*

AWT native 운영체제의 도움으로 작동하기 때문에 운영체제에 부담이 크다 하지만 그만큼 처리 속도가 빨르다.

Swing

AWT 기반으로 만들어진 라이브러리
AWT의 컴포넌트에 J 를 더한 컴포넌트들.

javax.swing.*

Swing은 운영체제에 의존 하지 않는다 .

  • Jcomponent를 상속받는 클래스
  • AWT 의 container를 상속받는 클래스 ( JApplet, JDialog, JFrame)

스윙 컴포넌트 의 공통 속성을 구현한 추상 클래스

컨테이너

다른 컴포넌트들을 포함할수있는 컴포넌트로 다른 컨테이너도 포함 가능하다.
AWT Container: Panel, Frame, Applet, Dialog, Window
Swing Container: Jpanel, JFrame, JDialog, JWindow

독립적으로 화면에 출력이 가능한 컴포넌트: JFrame , JDialog, JApplet
다른 컴포넌트는 컨테이너에 포함되어야 출력가능 하다.

예시 1)

import javax.swing.* 
public class  MyFrame extends JFrame{
	public MyFrame(){
    	setTitle(" My Title");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300,300);//frame size
        setVisible(True);//기본값 false
    }
    public static void main(String[] args){
	 MyFrame my = new  MyFrame():
    }
}

예시 2)

import javax.swing.* 
public class  MyContainer extends JFrame{
	public MyContainer(){
    	setTitle(" My Title");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //종류버튼을 누르면  응용프로그램 종료.
        
        Container pane = getContentPane();
        pane.setBackground(Color.RED);
        pane.setLayout(new FlowLayout());
        
        pane.add(new JButton("HI"));
        
        setSize(300,300);//container size
        setVisible(True);//기본값 false
    }
    public static void main(String[] args){
	 MyFrame my = new  MyFrame():
    }
}

응용프로그램을 종료하기위해선 System.exit(0); 필요하지만
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 하면 종료 버튼으로 중료시킬수있다.

Swing 프레임

Swing GUI 프로그램을 실행하면 main함수만 실행되는 것이 아니다. main 함수에서는 응용프로그램을 실행하는것이고
이벤트 분배 스레드가 실행된다 따라서 GUI 실행시킬때 두가지의 스레드가 실행됨

응용프로그램은 모든 스레드가 종료되어야 종료된다 하나라도 있으면 계속 실행중,

배치관리

배치관리자 Laytou manager

4가지 대표 배치

  • Flow Layout
  • Border Layout
  • Grid Layout
  • Card Laytout

Window , Frame , Dialog 는 Boder Layout을 기본으로 사용한다.
Panel , Applet 은 FlowLayout 기본으로 사용.

.setLayout(new -Layout()) 으로 사용

예) FlowLayout

Container c = frame.getContentPane();
c.setLayout( new FlowLayout());//레이아웃 설정 

.add( new - ())컴포넌트 추가 
c.add(new Jbutton());

//레이아웃 설정 
//왼쪽 정렬,  30 horizontal gap, 40 vertical gap 
c.setLayout(new FlowLayout(FlowLayout.left, 30,40))

예) Border Layout

import javax.swing.*; 
import java.awt.*;
public class Main extends JFrame {
    public Main() {
    setTitle("BorderLayout Sample");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    Container c = getContentPane();
   	c.setLayout(new BorderLayout());
    c.add(new JButton("Calculate"),BorderLayout.CENTER);
    c.add(new JButton("North"), BorderLayout.NORTH);
    c.add(new JButton("South"), BorderLayout.SOUTH);
    c.add(new JButton("East"), BorderLayout.EAST);
    c.add(new JButton("West"), BorderLayout.WEST);
    
    setSize(500, 300); // 프레임 크기 500×300 설정
    setVisible(true); // 프레임을 화면에 출력
    }
    public static void main(String[] args) {
        new Main();
    }
}

Grid Layout

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

응용프로그램 자체적으로 컨테이너의 크기와 위치를 결정한다.

  • 임시로 위치를 지정할때
  • 마우스/키보드 에 입력에 따라 위치와 크기가 변할때
  • 여러 컨포넌트들이 겹쳐서 출력하는 경우

컨테이너 제거: container.setLayout(null)
컨테이너 설정

  • 위치설정: component.setLocation ( x, y) ;
  • 크기설정: component.setSize(width,height)
  • 위치크기 동시설정: component.setBound( x,y, width, height);

0개의 댓글