본문 바로가기
Back/JAVA

Java GUI(AWT, Swing) - JFrame, JButton, JCheckBox, JRadioButton, JToggleButton

by 시월해 2021. 3. 18.

* Java GUI(Graphic User Interface)


 - 이미지 혹은 그래픽을 이용하여 메뉴 등을 포함하는 화면을 구성하고,
   키보드와 마우스 등의 편리한 입력 도구를 이용하여 사용자가 입력하기 편하도록 만들어진 사용자 인터페이스
 - java에서는 AMT와 Swing으로 어떠한 언어보다 강력한 GUI 라이브러리를 제공하여 소프트웨어 개발자들이
   다양한 GUI를 쉽게 구성할 수 있도록 함.


 * AWT와 Swing

 

  - 자바 언어는 GUI 프로그램을 쉽게 작성할 수 있도록 다양한 GUI 컴포넌트들을 제공.
    자바 GUI 컴포넌트는 AWT 컴포넌트와 Swing 컴포넌트로 구분이 됨.
     
  1. AWT 컴포넌트

     - java.awt 패키지를 통하여 공급이 됨
     - 운영체제의 도움을 받아 화면에 출력되기 때문에 자원을 많이 소모하여 운영체제의 부담이 큼.
     - 운영체제마다 컴포넌트의 모양이 다르게 나타남.


  2. Swing 컴포넌트

     - javax.swing 패키지를 통하여 공급이 됨.
     - AWT와 다르게 자바 언어로 작성이 되었음.
       ==> Sun사와 네스케이프라는 회사가 공동으로 개발함.
     - 운영체제의 도움을 받지 않았음. ==> 경량 컴포넌트라고 불림.
     - 운영체제와 관계 없이 항상 동일한 모양이 나타남.
     - AWT에는 없는 풍부한 고급 Swing 컴포넌트들을 추가적으로 개발을 하였음.
     - 다양하고 모양이 예쁜 Swing 컴포넌트를 더 많이 사용함.
       ==> 최근에는 거의 모든 GUI 프로그램이 Swing 기반으로 작성됨.


*  GUI에서 알아두어야 할 용어 - 3가지


  - 컴포넌트 : 버튼, 텍스트상자, 레이블상자, 옵션박스, 체크박스, 라디오버튼 등을 말함.
  - 컨테이너 : 컴포넌트들을 담을 수 있는 클래스.
    ==> 컴포넌트는 반드시 컨테이너에 올려져야 화면에 보여짐.
  - 프레임 : 컨테이너들을 담을 수 있는 클래스.
     ==> 컨테이너는 반드시 프레임에 올려져야 화면에 보여짐.
        


   (단면으로 보았을 때)
            ▣ ▣ ▣ ▣ ▣ ▣ ▣ ▣             - 컴포넌트
      □□□□□□□□□□□□□□□      - 컨테이너    
    ■■■■■■■■■■■■■■■■■   - 프레임

 

 

* Frame을 만드는 방법


1. Frame이라는 클래스를 상속을 받아서 생성자를 통해 화면에 Frame을 보여주는 방법

2. Frame이라는 클래스의 객체를 생성해서 사용.

 


예제1) AWT를 이용한 Frame 생성

public class Ex01_Frame extends Frame {
	
	public Ex01_Frame() {
		
		// 프레임에 제목을 설정하는 방법
		super("첫번째 예제"); // 부모의 생성자 호출
		
		// 프레임의 위치를 설정하는 방법(화면 기준 좌상단 모서리부터 0으로 좌표가 시작한다.)
		setLocation(100,100);
		
		// 프레임의 크기를 설정하는 방법
		setSize(300, 300);
		
		// 프레임을 화면에 보여주어야 함.
		// setVisible() : 프레임을 화면에 보여주는 메서드.
		// setVisible(boolean형) - 기본값(false)
		setVisible(true);
		
	}

	public static void main(String[] args) {
		
		new Ex01_Frame();
		

	}

}
public class Ex02_Frame {

	public static void main(String[] args) {
		
		Frame f = new Frame("두번째 예제");
		
		//프레임의 위치
		//f.setLocation(100, 100);
		
		//프레임의 크기
		// f.setSize(300, 300);
		
		//프레임의 위치 + 프레임의 크기 동시 설정
		f.setBounds(100, 100, 300, 300); // x좌표, y좌표, 가로, 세로
		
		//프레임을 화면에 보여주기
		f.setVisible(true);

	}

}

두 가지 방법 모두 같은 결과가 나타난다.

AWT로 만든 프레임은 X를 눌러도 창이 꺼지지 않으며, Console창에서 중단(빨간버튼)을 눌러야만 창이 꺼진다.


예제2) Swing을 이용한 Frame 만들기

package sist;

import javax.swing.JFrame;

public class Ex03_JFrame extends JFrame{

	public Ex03_JFrame() {
		
		setTitle("세번째 예제");
		setBounds(100, 100, 300, 300);
		setVisible(true);
	}
	
	public static void main(String[] args) {
		
		new Ex03_JFrame();

	}

}

AWT와 다르게 화면이 회색이다.

 


예제3) Frame에 Button을 추가하기

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

public class Ex04_JButton extends JFrame{

	public Ex04_JButton() {
		
		
		
		// 프레임을 만들어 보자.
		JFrame frame = new JFrame();
		
		// 컨테이너를 만들어 보자
		JPanel jp = new JPanel();
		
		// 1. 컴포넌트를 만들어 보자.
		JButton jb1 = new JButton("버튼1"); 
		JButton jb2 = new JButton("버튼2"); 
		JButton jb3 = new JButton("버튼3"); 
		
		// 2. 컴포넌트를 컨테이너에 올려야 한다.
		jp.add(jb1);
		jp.add(jb2);
		jp.add(jb3);
		
		// 3. 컨테이너를 프레임에 올려야 한다.
		frame.add(jp);
		
		// add(jp);
		frame.setTitle("세번째 예제");
		frame.setBounds(100, 100, 300, 300);
		frame.setVisible(true);
	}
	
	public static void main(String[] args) {
		
		new Ex04_JButton();
	}

}

버튼이 추가됨


예제4) Frame에 CheckBox 추가하기

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Ex05_JCheckBox {

	public static void main(String[] args) {
		
		JFrame jf = new JFrame();
		
		jf.setTitle("JCheckBox 예제");
		
		// 컨테이너를 만들자
		JPanel jp = new JPanel();
		
		// 1. 컴포넌트를 만들자.
		JCheckBox jcb1 = new JCheckBox("게임");
		JCheckBox jcb2 = new JCheckBox("독서");
		JCheckBox jcb3 = new JCheckBox("영화감상", true); //체크된 상태로 나옴
		JCheckBox jcb4 = new JCheckBox("운동");
		JCheckBox jcb5 = new JCheckBox("잠자기");
		
		// 2. 컴포넌트를 컨테이너에 올리자.
		jp.add(jcb1);
		jp.add(jcb2);
		jp.add(jcb3);
		jp.add(jcb4);
		jp.add(jcb5);
		
		// 3. 컨테이너를 프레임에 올려야 한다.
		jf.add(jp);
		jf.setBounds(100, 100, 300, 300);
		jf.setVisible(true);
	}

}

체크박스이기때문에 여러개 체크 가능


예제5) ImageIcon을 이용한 CheckBox 만들기

import javax.swing.ImageIcon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Ex06_JCheckBoxExam {

	public static void main(String[] args) {
		JFrame jf = new JFrame();
		JPanel jp = new JPanel();
		jf.setTitle("과일 체크박스 예제");
		
		// 1-1. 과일 이미지 아이콘을 만들어보자.
		ImageIcon kiwi = new ImageIcon("images/kiwi.jpg");
		ImageIcon mango = new ImageIcon("images/mango.jpg");
		ImageIcon apple = new ImageIcon("images/apple.jpg");
		
		// 1-2. 컴포넌트를 만들어 보자.
		JCheckBoxMenuItem jcb1 = new JCheckBoxMenuItem("키위", kiwi);
		JCheckBoxMenuItem jcb2 = new JCheckBoxMenuItem("망고", mango);
		JCheckBoxMenuItem jcb3 = new JCheckBoxMenuItem("사과", apple);
		
		// 2. 컴포넌트를 컨테이너에 올려야 한다.
		jp.add(jcb1); jp.add(jcb2); jp.add(jcb3);
		
		// 3. 컨테이너를 프레임에 올려야 한다.
		jf.add(jp);
		
		jf.setBounds(100,100,300,600);
		
		// 프레임의 크기를 안에 들은 컴포넌트에 따라 자동으로 맞춰주는 메서드
		jf.pack();
		
		// 프레임의 크기 조절을 off
		jf.setResizable(false);
		
		// 프레임의 x버튼 클릭 시 종료시키는 메서드
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setVisible(true);

	}

}

ImageIcon에 사진이 담겨서 체크박스가 이미지로 표기되었다.(파일 경로에 이미지가 있어야 한다.)


예제6) Frame에 RadioButton 추가하기

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;


public class Ex07_JRadioButton extends JFrame{

	public Ex07_JRadioButton() {
		JPanel jp = new JPanel();
		setTitle("JRadioButton 예제");
		
		// 1. 컴포넌트를 만들어 보자.
		JRadioButton jrb1 = new JRadioButton("게임");
		JRadioButton jrb2 = new JRadioButton("여행", true);
		JRadioButton jrb3 = new JRadioButton("운동");
		JRadioButton jrb4 = new JRadioButton("잠자기");
		
		// 라디오 버튼은 반드시 ButtonGroup에 올려져야 한다. 안 그러면 전부 선택이 됨.
		ButtonGroup bg = new ButtonGroup();
		bg.add(jrb1);
		bg.add(jrb2);
		bg.add(jrb3);
		bg.add(jrb4);
		
		// 2. 컴포넌트를 컨테이너에 올려야 한다.
		jp.add(jrb1);
		jp.add(jrb2);
		jp.add(jrb3);
		jp.add(jrb4);

		// 3. 컨테이너를 프레임에 올려야 한다.
		add(jp);
		setBounds(100,100,300,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	public static void main(String[] args) {
		
		new Ex07_JRadioButton();

	}

}

RadioButton은 1개씩만 선택할 수 있다. ButtonGroup 필수.


예제7) Frame에 ToggleButton 추가하기.

ToggleButton 이란? 한 번 누르면 선택이 되고, 다시 누르면 선택이 해제되는 버튼이다.

import javax.swing.*;

public class Ex08_JToggleButton extends JFrame{

	public Ex08_JToggleButton() {
		
		JPanel jp = new JPanel();
		
		// 1. 컴포넌트를 만들어 보자.
		JToggleButton jtb1 = new JToggleButton("토글버튼1");
		JToggleButton jtb2 = new JToggleButton("토글버튼2");
		JToggleButton jtb3 = new JToggleButton("토글버튼3");
		
		// 2. 컴포넌트는 컨테이너에 올려야 한다.
		jp.add(jtb1);
		jp.add(jtb2);
		jp.add(jtb3);
		
		// 3. 컨테이너는 프레임에 올려져야 한다.
		add(jp);
		setBounds(100,100,300,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	public static void main(String[] args) {
		
		new Ex08_JToggleButton();

	}

}

토글버튼2를 선택했을때
토글버튼2를 다시 눌러 선택 해제