Programming/Java

17. JAVA 그래픽

주죵 2021. 1. 17. 00:38
728x90
반응형

JAVA GUI(Graphic User Interface)란?

바탕화면 아이콘 더블클릭하면 해당 프로그램을 시작시켜준다. JAVA GUI란 이런 아이콘처럼 사용자가 사용하기 편리하게 그래픽 요소를 가미하여 컴퓨터를 사용하기 쉽게 만들어놓은 것이다. 반대 개념은 CUI(Character User Interface : 문자열 명령어로 애플리케이션을 구동, 종료하는것)이다.

 

AWT 컴포넌트

AWT는 자바에서 그래픽 요소를 만들기 위한 컴포넌트들이다. 버튼, 체크박스등이 그 예이다.

출처 : 신입SW 인력을 위한 실전 자바

컨테이너 안에는 또 다른 컨테이너가 놓일 수 있다. 그 안엔 또 버튼, 텍스트필드, 체크박스와 같은 컴포넌트가 존재한다.

 

다양한 컴포넌트들을 예제코드를 통해 살펴보자

Button

package com.javalec.ex2;

import java.awt.Frame;
import java.awt.Button;
/*
Frame을 상속받아 Button을 생성하는 클래스 설정
*/
public class Makebtn extends Frame {
	public Makebtn() {
		// TODO Auto-generated constructor stub
		Button btn = new Button("Button");
		add(btn);
	}
}

import java.awt.Dimension;

public class MainClass {
	public static void main(String[] args) {
		Makebtn btn = new Makebtn();
	//	btn.pack();
		btn.setSize(new Dimension(200,200)); //사이즈
		btn.setVisible(true); //화면에 보이게
	try {
		Thread.sleep(2000);
		
	} catch (Exception e) {
		// TODO: handle exception
	}
	
	btn.setVisible(false);
	btn.dispose(); //자원 해제
	
	try {
		Thread.sleep(2000);
	} catch (Exception e) {
		// TODO: handle exception
	}
	System.exit(0); //프로세스 종료
	}

}

 

 

설정한 사이즈의 버튼이 떴다가 사라지도록 하는 예시이다. 

 

Frame, Panel, List, Components, Event 처리

버튼을 누르면 어떤 이벤트가 일어나도록 해보자

package com.javalec.ex3;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;


public class MakeFrame extends Frame  implements ActionListener{
	//컴포넌트들 생성 및 초기화
	//패널을 만들어놓고 그 안에 컴포넌트들 올리는것
	private List list; 
	private Panel panel;
	private TextField textfield;
	private Button okBtn;
	private Button exitBtn;
	
	
	public MakeFrame() {
		// TODO Auto-generated constructor stub
		list = new List();
		panel = new Panel();
		textfield = new TextField();
		okBtn = new Button("OK");
		exitBtn = new Button("EXIT");
		//레이아웃 잡기
		setLayout(new BorderLayout());
		add(panel,BorderLayout.NORTH); //레이아웃의 위쪽부분에 패널 붙이기
		add(list, BorderLayout.CENTER); //센터부분에 리스트 붙이기
		
		panel.add(new Label("Write")); //패널에 Write라벨 추가
		panel.add(textfield); //텍스트필드 추가
		panel.add(okBtn); //패널에 버튼 붙이기
		panel.add(exitBtn);
		
		//액션받아서 actionPerform 호출하도록 설정
		okBtn.addActionListener(this);
		exitBtn.addActionListener(this);
		
		
	}
	
	
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource()==okBtn) {
			list.add(textfield.getText());
		
		}else if(e.getSource()==exitBtn) {
			setVisible(false);
			dispose();
			System.exit(0);
			
		}
	}
	
}

package com.javalec.ex3;

import java.awt.Dimension;

public class MainClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		MakeFrame makeFrame = new MakeFrame();
		makeFrame.setSize(new Dimension(500,500));
		makeFrame.setVisible(true);
		

	}

}

 

 

Frame 위에 Panel이 있고 그 위에 Components를 구성한 것이다. 그리고 이벤트처리까지.

아래의 그림을 참고하자

 

Swing 컴포넌트

awt보다 진보된 기능이다. 진보보다는 더 복잡하고 화려한 컴포넌트를 제공한다고 보면 된다. 사용 방법은 awt와 유사한 부분이 많다.

예시코드를 보며 학습해보자

package com.javalec.ex4;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;


public class MakeComp extends JFrame implements ActionListener{
	
	JPanel jPanel;
	JLabel jLabel;
	JButton jButton;
	JButton jButtonExit;
	JTextField jTextField;
	JComboBox<String> jComboBox;
	JCheckBox jCheckBox;
	String[] items = {"A","B","C"};
	JLabel jLabelBlank;
	
	
	
	public MakeComp() {
		// TODO Auto-generated constructor stub
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jPanel = (JPanel)getContentPane();
		jPanel.setLayout(new FlowLayout());
		jLabel = new JLabel("Label");
		jButton = new JButton("Button");
		jTextField = new JTextField(20);
		jComboBox = new JComboBox<String>(items);
		jCheckBox = new JCheckBox("CheckBox");
		jLabelBlank = new JLabel();
		jButtonExit = new JButton("Exit");
		
		jPanel.add(jLabel);
		jPanel.add(jButton);
		jPanel.add(jTextField);
		jPanel.add(jComboBox);
		jPanel.add(jCheckBox);
		jPanel.add(jLabelBlank);
		jPanel.add(jButtonExit);
		
		jLabel.setPreferredSize(new Dimension(50,50));
		jButton.setPreferredSize(new Dimension(100,50));
		jTextField.setPreferredSize(new Dimension(300,50));
		jComboBox.setPreferredSize(new Dimension(50,50));
		jCheckBox.setPreferredSize(new Dimension(100,50));
		jLabelBlank.setPreferredSize(new Dimension(200,50));
		jButtonExit.setPreferredSize(new Dimension(100,50));
		
		jButton.addActionListener(this);
		jButtonExit.addActionListener(this);
		
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource()==jButton) {
			//버튼누르면 텍스트필드의 텍스트 블랭크에 세팅
			jLabelBlank.setText(jTextField.getText());;
			
		}else if(e.getSource()==jButtonExit) {
			setVisible(false);
			dispose();
			System.exit(0);
			
		}
		
	}

}


public class MainClass {
	public static void main(String[] args) {
		MakeComp makecomp = new MakeComp();
		makecomp.pack();
		makecomp.setVisible(true);
	}

}

 

요즘 많이 쓰이는 기능은 아니지만 어쩌면 기본적인 틀과 구조가 비슷한것(안드로이드 프레임워크)이 많으므로 학습해보도록 하자구!

 

출처 : 신입SW인력을 위한 실전자바 (by블스)

728x90

'Programming > Java' 카테고리의 다른 글

[Java SSAP 기초] Array vs ArrayList  (0) 2021.02.02
18. JAVA 네트워크  (0) 2021.01.17
16. 스레드(Thread)  (0) 2021.01.16
15. JAVA 입출력(I/O)  (0) 2021.01.16
14. JAVA Collections  (0) 2021.01.15