투케이2K

191. (java/자바) GUI (awt/swing) - for문 사용해 동적으로 레이아웃 JButton 버튼 생성 및 ActionListener 클릭 이벤트 정의 본문

Java

191. (java/자바) GUI (awt/swing) - for문 사용해 동적으로 레이아웃 JButton 버튼 생성 및 ActionListener 클릭 이벤트 정의

투케이2K 2021. 4. 6. 08:43

/* =========================== */

[ 개발 환경 설정 ]

개발 툴 : Eclipse

개발 언어 : Java

/* =========================== */

/* =========================== */

[소스 코드]

 

package ex5;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;

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

//TODO 액티비티에 ActionListener 클릭 이벤트 상속 받음
public class MainActivity13 extends JFrame implements ActionListener{
	
	//TODO 전역 변수 선언 실시
	static String[] arr = {"0","1","2","3","4","5","6","7","8","9","10","11"};
	static JButton[] btn = new JButton[12];
	static JLabel txt;
	static MainActivity13 mainActivity;
	
	//TODO 메인 메소드 시작 부분
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("[GUI - for문 사용해 동적으로 레이아웃 JButton 버튼 생성 및 ActionListener 클릭 이벤트 정의]");
		
		/*[설 명]
		 * 1. 자바에서는 JFrame을 사용해서 GUI 프로그램을 만들 수 있습니다
		 * 2. new GridLayout(행, 열, 가로여백, 세로여백) 표시 - 테이블 모양 형식 
		 * 3. ActionListener : 클릭 이벤트 정의 실시
		 * 4. for문 : 동적으로 배열에 포함된 값을 사용해 버튼을 생성합니다		 
		 * */
		
		//TODO 클릭 이벤트를 정의하기 위해 액티비티 객체 생성
		mainActivity = new MainActivity13();		
		
		//TODO 부모 프레임 생성
		JFrame frm = new JFrame("동적으로 레이아웃 생성");
 
		//TODO 부모 프레임 크기 설정 (가로, 세로)
		frm.setSize(500, 500);
 
		//TODO 부모 프레임을 화면 가운데에 배치
		frm.setLocationRelativeTo(null);
 
		//TODO 부모 프레임을 닫았을 때 메모리에서 제거되도록 설정
		frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
		//TODO 부모 레이아웃 설정
		frm.getContentPane().setLayout(null);
		
		//TODO 자식 레이아웃 [텍스트] 생성
		txt = new JLabel("");
		txt.setBounds(0, 0, 500, 100); //setBounds(가로위치, 세로위치, 가로길이, 세로길이);
		txt.setFont(new Font("맑은 고딕", 0, 20)); //TODO 폰트 정의
		txt.setHorizontalAlignment(JLabel.CENTER); //TODO 텍스트 센터 표시 설정
		
		//TODO 자식 레이아웃 [버튼] 생성
		JPanel grid_panel = new JPanel();
		grid_panel.setLayout(new GridLayout(4, 4, 0, 0)); //테이블 형식 - 행, 열, 가로 여백, 세로 여백
						
		for(int idx=0; idx<arr.length; idx++) {
			btn[idx] = new JButton(arr[idx]);
			btn[idx].setFont(new Font("맑은 고딕", 0, 20)); //TODO 폰트 정의
			btn[idx].setBackground(Color.GRAY); //TODO 백그라운드 색상 정의
			btn[idx].setForeground(Color.WHITE); //TODO 텍스트 색상 정의
			btn[idx].addActionListener(mainActivity); //TODO 클릭 이벤트 추가
			
			grid_panel.add(btn[idx]); //TODO JPanel에 버튼 추가
			
		}
		grid_panel.setBounds(0, 100, 500, 350); //setBounds(가로위치, 세로위치, 가로길이, 세로길이);
		 
		//TODO 부모 프레임에다가 자식 컴포넌트 추가
		frm.getContentPane().add(txt);
		frm.getContentPane().add(grid_panel);
		
		//TODO 부모 프레임이 보이도록 설정
		frm.setVisible(true);
		
	}//메인 종료
	
	//TODO 버튼 클릭 이벤트 수행 부분
	@Override
	public void actionPerformed(ActionEvent e) { 
		//TODO Auto-generated method stub
		
		//TODO 컴포넌트에 정의된 text 받아오는역할 
		switch(e.getActionCommand()){
		
		//TODO getActionCommand() 버튼의 텍스트를 얻어옵니다
		case "0": 
			txt.setText("0"); 
			break;
			
		case "1": 
			txt.setText("1"); 
			break;
			
		case "2": 
			txt.setText("2"); 
			break;
			
		case "3": 
			txt.setText("3"); 
			break;	
			
		case "4": 
			txt.setText("4"); 
			break;	
			
		case "5": 
			txt.setText("5"); 
			break;
			
		case "6": 
			txt.setText("6"); 
			break;	
			
		case "7": 
			txt.setText("7"); 
			break;	
			
		case "8": 
			txt.setText("8"); 
			break;		
			
		case "9": 
			txt.setText("9"); 
			break;		
		
		case "10": 
			txt.setText("10"); 
			break;		
			
		case "11": 
			txt.setText("11"); 
			break;		
			
		default :
			txt.setText("NO"); 
			break;
		}
	}

}//클래스 종료

/* =========================== */

[결과 출력]

/* =========================== */

/* =========================== */

[요약 설명]

* 1. 자바에서는 JFrame을 사용해서 GUI 프로그램을 만들 수 있습니다

* 2. new GridLayout(행, 열, 가로여백, 세로여백) 표시 - 테이블 모양 형식

* 3. ActionListener : 클릭 이벤트 정의 실시

* 4. for문 : 동적으로 배열에 포함된 값을 사용해 버튼을 생성합니다

/* =========================== */

반응형
Comments