다라다라V
article thumbnail
728x90
반응형

지난 포스트에서 SWING으로 만드는 자바 GUI 방식의 대략적인 개요를 살펴봤습니다. 이번 시간에는 각 컴포넌트들을 윈도우 화면에 띄우는 방법을 배워봅시다.

https://daradarav.tistory.com/35

 

[JAVA] 14-1 Swing의 기본 특징

우리가 여태까지 짜왔던 프로그램은 텍스트로 직접 값을 입출력하고 처리하는 프로그램이었습니다. 그러나 일상에서 우리가 자주 사용하는 윈도우나 iOS은 그래픽 기반의 아이콘, 윈도우, 메뉴

daradarav.tistory.com


📚 Swing 프로그램 만들기

📃 프레임 객체 생성

import javax.swing.JFrame;
  • 최상위 컨테이너 윈도우 프레임
  • 화면을 구성하고, 각 화면에서 이벤트 처리를 합니다.

 

📃 프레임에  스윙  컴포넌트  붙이기

import javax.swing.*; // 생성
import java.awt.*;    // 배치

📃 이벤트 처리

import java.awt.event.*;
import javax.swing.event.*;
  • 이벤트 처리는 주로 awt 를 사용합니다
  • 새로 추가된 이벤트의 경우는 swing 을 통해 처리합니다.

📃 프레임 가시화


📚 프레임 만들기

  • 일반적으로 하나의 응용프로그램에 하나의 프레 임  존재
  • 모든 스윙 컴포넌트를 담는 최상위 컨테이너 중 하나인 JFrame 이용
  • JFrame에는 다수의 컴포넌트들을 직접, 간접적으로 부착
  • 프레임이 닫히면 프레임 내의 모든 컴포넌트도 사멸하여 화면에서 사라짐

📚 JFrame 클래스

  • 일반적인 응용프로그램 윈도우를 생성하기 위해 사용
  • 경계선(Border), 타이틀, 시스템 상자 제공
  • 메뉴를 붙일 수 있음
  • 윈도우 위치/크기 설정: setLocation() / setSize() / setBounds()
  • 윈도우를 화면에 표시 : setVisible()

📚 JFrame 클래스의 구성

JFrame 클래스는 네 개의 pane이 층으로 구성되어 있습니다.

  1. glassPane
  2. contentPane
    *  일반적인 컴포넌트들을 갖는 패널
    *  JDK 5.0 이후에선 add() 메서드 호출만으로 바로 컴포넌트를 붙일 수 있음
  3. layeredPane
    *  contentPane, JMenuBar를 포함
  4. JRootPane

📚 프레임 생성 방법 (1)

  • 작성하고자 하는 클래스에서 JFrame 객체를 생성하여 사용
  • 생성된 JFrame 객체를 윈도우를 나타내는데 이용
import javax.swing.JFrame;

public class JavaFrame {
	
	JFrame frame;
	
	public JavaFrame() {
		// frame = new JFRame();
		// frame.setTitle("Frame Test");
		frame = new JFrame("Frame Test");
		
		// ...
		
		frame.setSize(200, 200);
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
	
	public static void main(String[] args) {
		JavaFrame hello = new JavaFrame();
	}

}
  • JFrame의 객체를 생성하고 메서드를 사용하여 setTitle로 제목을 설정할 수 있음
  • JFrame을 생성하면서 인자로 제목을 설정할 수 있음
  • setSize로 크기를 설정하고, setLocation으로 위치를 설정할 수 있음
  • setBounds로는 크기와 위치를 모두 설정할 수 있음
  • setVisible을 통해 가시화 작업을 함

📚 프레임의 [종료] 버튼 처리

  • 기본적으로 프레임 숨김 동작을 처리
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
  • 프레임을 바로 종료하기 위해선
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  • 프레임 종료시에 임의의 작업 필요시에는 WindowEvent에 대한 처리로 해결
System.exit(0);

📚 스윙 응용프로그램에서 main( )의 기능

  • 스윙 응용프로그램이 실행되는 시작점으로서의 기능
  • 프레임 객체를 생성하는 정도의  코드로 역할 최소화
  • 화면 구성 및 이벤트 처리는 모두 프레임 이하 객체들이 담당하도록 구성하는 것이 바람직
  • 프레임 객체를 참조변수로 받을 필요 없이 바로 객체를 생성하여 처리

📚 main( ) 메서드 종료 vs 프로그램 종료

  • 콘솔 응용 프로그램
  • main() 메서드 실행시 main 스레드가 생성되어 처리 됨
  • Swing 응용 프로그램
  • main() 메서드 실행시 main 스레드가 생성
  • 이때 JFrame 객체  생성시 추가적으로  이벤트 처리 스레드가 생성되어 사용됨
  • 사용자 입력으로부터  발생되는 각  이벤트를 해당 컴포넌트에 전달
  • 프로그램은 두 스레드가 모두 종료시에 종료됨

📚 프레임 생성 방법 (2)

  • 작성하고자 하는 클래스를 JFrame으로부터 상속 받아 사용
  • 작성한 클래스의 객체 자신이 JFrame 객체
import javax.swing.*;

public class JavaFrame extends JFrame{
	
	public JavaFrame() {
		super("Frame Test2");
		
		// ...
		
		setSize(200, 300);
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	public static void main(String[] args) {
		JavaFrame hello = new JavaFrame();
	}

}

📚 프레임에 컴포넌트 붙이기

📃 타이틀 달기

  • 생성자의 인수로 지정
  • JFrame의 setTitle() 이용

 

📃 메뉴

  • JFrame의  layeredPane에  별도  방법으로  부착

 

📃 스윙 컴포넌트

  • JFrame의  contentPane에  add()로  부착
  • Container contentPane = frame.getContentPane();
    contentPane.add(...);
  • JDK 5.0이후엔  frame에  대해  add() 호출  허용

📚 컨테이너와 배치

  • 객체의 도움을 받아 배치하게 되는데 부착될 컴포넌트의 위치와 크기를 지정함
  • 각 컨테이너마다 기본 배치관리자가 존재
  • 내부 컴포넌트의 크기와 위치를 적절히 결정
  • 컨테이너의 크기 변경시 내부 컴포넌트의 위치와 크기를 재조절

📚 배치 관리자 (Layout Manager)

  • 미리 정의된  방법에 따라 각 컴포넌트를 컨테이너의 정해진 위치에 붙여주는 객체
  • 기본 배치  관리자는 컨테이너 생성 시 자동으로 생성되는 배치관리자
    • JFrame, JDialog : BorderLayout
    • JPanel, JApplet : FlowLayout
  • 각 컨테이너에 새로운 배치 관리자  적용  가능
    • setLayout(LayoutManager lm) 메서드

📚 배치 관리자의 종류

📃 FlowLayout

  • 상단 중앙부터, 수평우선(좌→우)으로 배치
  • 배치 공간 부족시 아래로 내려와 반복
  • 가운데 정렬
  • 프레임 폭이 지정되어 있어 넘칠 경우 다음 주로 넘어감

 

 

📃 BorderLayout

  • 영역을 5개 영역으로 분할하여 각 영역에  배치
  • CENTER(기본  영역), NORTH, SOUTH, WEST, EAST
  • 영역에 대한 지정은 따로 해줘야함
  • 한 영역에 하나씩만 붙음

 

📃 GridLayout

  • 일정한 크기의 격자모양으로 나누어 배치(좌→우, 상→하)
  • 화면을 모눈 종이처럼 영역을 나누어 배치
  • 한 영역에 하나씩만  붙음

 

📃 CardLayout

  • 한 순간에 하나의 컴포넌트만 표시

📚 JPanel 클래스

  • 컴포넌트를 그룹별로 묶어서 처리할 때 주로 사용
  • 하나 이상의 패널은 다른 패널에 붙일 수 있음
  • 패널간의  계층적 구성이  가능
  • 일반적인 윈도우 구성
  • 각 컴포넌트를 배치 그룹별로 각각의 패널에 붙이고, 그 패널들을 또다른 패널 혹은 프레임에 붙임

📚 배치 관리자의 적용

  • 컨테이너에 특정 배치 관리자의 적용
  • Container 클래스의 setLayout() 메서드 인자로 지정

예1) FlowLayout 배치에서 왼쪽정렬 설정 방법

p.setLayout(new FlowLayout(FlowLayout.LEFT));

예2) p를 BorderLayout으로 설정

p.setLayout(new BorderLayout());

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

  • 컴포넌트의 크기와 위치를 직접  지정
  • 사용자 입력에 따라 컴포넌트 위치/크기가 수시로 변경되는 경우
  • 배치관리자  객체 지정대신  null 지정
  • 해당 컨테이너에 속하는 모두 컴포넌트에 대해 크기와 위치를 직접 지정해야  함
  • setSize(), setLocation(), setBounds()

 

반응형

'코딩언어 > JAVA' 카테고리의 다른 글

[JAVA] 15 이벤트 처리  (0) 2022.11.17
[JAVA] 14-1 Swing의 기본 특징  (0) 2022.11.08
[JAVA] 13. 제네릭과 컬렉션  (0) 2022.11.05
[JAVA] 12. 예외처리  (0) 2022.11.04
[JAVA] 11 추상 클래스와 인터페이스  (0) 2022.11.03
profile

다라다라V

@DaraDaraV

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!