⚙ 환경 설정 창 만들기

heeezni·2025년 5월 21일

Java GUI 프로젝트

목록 보기
5/20
post-thumbnail

"환경설정" 버튼을 누르면 작은 설정 창이 열리고,
왼쪽의 TextArea에 글자를 입력한 후,
오른쪽 설정 창의 TextField에 폰트 사이즈를 입력하고
"설정 적용" 버튼을 클릭하면
입력한 글자에 해당 폰트 크기가 적용되게 구현해보자!

MyWin 클래스

package gui.swing;
import javax.swing.*;
import java.awt.*;

public class MyWin extends JFrame implements ActionListener {
	JTextArea area;    
	JPanel p_south;  
	JButton bt;          

	public MyWin() {
		area = new JTextArea(4, 15); //(행, 열)
		p_south = new JPanel();            
		bt = new JButton("환경설정");          
		
		area.setBackground(Color.YELLOW);     
		
		add(area);                           
		p_south.add(bt);                      
		add(p_south, BorderLayout.SOUTH);     
		
		bt.addActionListener(this); //버튼에 이벤트 리스너 등록
		
		setBounds(500, 100, 300, 400); //x,y,width,height
		setVisible(true); 
	}
	
	//액션리스너 메서드 오버라이딩
	public void actionPerformed(ActionEvent e) {
		new ConFig(this);//현재 창(MyWin)의 주소값을 ConFig 생성자에 전달
	}
    
	public static void main(String[] args) {
		new MyWin(); 
	}
}

ConFig 클래스

package gui.swing;
import javax.swing.*;
import java.awt.*;

public class ConFig extends JFrame implements ActionListener {
	JTextField t_size;  
	JButton bt; 

	//has-a 관계: MyWin 인스턴스를 멤버로 보유
	MyWin myWin = null;
	
	public ConFig(MyWin myWin) {
		//외부에서 MyWin 인스턴스를 전달받음 (Call by Reference)
		this.myWin = myWin; 
		
		t_size = new JTextField(10);   
		bt = new JButton("설정 적용"); 
		
		setLayout(new FlowLayout()); //컴포넌트들의 크기 보존위해
		
		add(t_size);  
		add(bt); 
		
		bt.addActionListener(this); //버튼에 이벤트 리스너 등록
		
		setBounds(800, 100, 200, 150);
		setVisible(true);                   
	}
	
	//액션리스너 메서드 오버라이딩
	public void actionPerformed(ActionEvent e) {
		// ⭐ 입력된 글자 크기 가져오기 ⭐
		int size = Integer.parseInt(t_size.getText()); 
        // 예: "55" → 55

		//MyWin의 텍스트영역에 새 폰트 적용 (기본폰트, 일반체, size)
		myWin.area.setFont(new Font(null, 0, size));
	}
}

Swing

자바의 GUI 컴포넌트 종류

  • AWT 컴포넌트
    java.awt
    OS 의존적

  • Swing 컴포넌트 ✅
    AWT를 보완한 경량 GUI 라이브러리
    javax.swing
    OS와 무관하게 자바만으로 UI 구성 → 일관된 UI
    OS 중립적 (고정된 Look & Feel)

  • JavaFX → 최신 UI/UX에 적합한 자바 GUI 툴킷
  • Swing은 AWT를 기반으로 만들어졌기 때문에,
    AWT 컴포넌트 이름에 J 접두어를 붙인 구조

  • 운영체제와 무관한 고정된 Look & Feel을 제공함
    → 자바 자체 스타일(UI 디자인)을 유지함


frame.setBounds( )

setBounds() :
컴포넌트의 위치와 크기를 동시에 설정할 수 있는 메서드
x, y, width, height 순으로 작성

창을 나란히 띄우고 싶으면?

  • 가로로 나란히
// 첫 번째 창
frame1.setBounds(100, 100, 300, 400);  // (x=100, y=100)

// 두 번째 창 (첫 번째 창 오른쪽에 딱 붙게)
frame2.setBounds(100 + 300, 100, 300, 400);  // x = 이전 x + 이전 width
  • 세로로 나란히
// 첫 번째 창
frame1.setBounds(100, 100, 300, 400);

// 두 번째 창 (첫 번째 창 아래에 딱 붙게)
frame2.setBounds(100, 100 + 400, 300, 400); // y = 이전 y + 이전 height

Java의 Wrapper 클래스

📌 Wrapper 클래스: 기본 자료형(primitive type)을 객체(object)로 감싸는 클래스

  • int → Integer
  • char → Character

나머지는 기본형에 첫 글자만 대문자로 바뀜

✅ 코드 속 Wrapper 클래스 예시

int size = Integer.parseInt(t_size.getText());

parseInt()는 static 메서드
→ 객체 생성 없이 클래스명으로 바로 호출 가능
→ ⭐ Integer 클래스의 parseInt()메서드로
"숫자형태의 문자열"를 int 기본형 숫자로 만듦

📌 왜 필요할까?

  • 컬렉션(List, Map 등)은 객체만 저장할 수 있음
    → 기본형은 직접 사용 불가

  • 기본형은 메서드나 속성이 없음
    → Wrapper 클래스는 .메서드( ) 활용 가능

  • 문자열과의 변환, 비교, 파싱 등 기능 제공
    즉, 기본형으로 할 수 없었던 다양한 작업을 가능하게 해줌

profile
아이들의 가능성을 믿었던 마음 그대로, 이제는 나의 가능성을 믿고 나아가는 중입니다.🌱

0개의 댓글