버튼에 아이콘 적용하는 법

heeezni·2025년 5월 29일
post-thumbnail

Util

Java의 Util 클래스 :
일반적으로 공통적으로 자주 쓰는 기능(함수)을 정리해 놓은 유틸리티 클래스 (JS의 라이브러리와 유사)

유틸리티 클래스에서 '이미지 아이콘을 로드하고, 크기를 조절해 반환하는 메서드'를 정의하여 사용하기 쉽게 처리해두자!

package util;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;

public class ImageUtil {
    
    /* 클래스패스(classpath)에 포함된 이미지 파일을 
    지정한 크기로 불러와 Icon으로 반환 */
    public Icon getIcon(String filename, int width, int height) { // static 없으므로 new 해야함
        Class myClass = getClass(); // 현재 클래스의 참조
        URL url = myClass.getClassLoader().getResource(filename); // 클래스패스에서 리소스 찾기

        ImageIcon icon = null;

        try {
            // 원본 이미지 로드
            BufferedImage buffrImg = ImageIO.read(url);

            // 크기 조절된 이미지 생성
            Image img = buffrImg.getScaledInstance(width, height, Image.SCALE_SMOOTH);

            // 아이콘 생성
            icon = new ImageIcon(img);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return icon;
    }
}
	ImageUtil imageUtil;
    
public ShopMain() {
	imageUtil = new ImageUtil();
    
	bt_home = new JButton(imageUtil.getIcon("home.png", 30, 30));
	bt_product = new JButton(imageUtil.getIcon("product.png", 30, 30));
	bt_mypage = new JButton(imageUtil.getIcon("mypage.png", 30, 30));
	bt_cs = new JButton(imageUtil.getIcon("cs.png", 30, 30));

사용은 이렇게 버튼 생성 시 매개변수로 파일명, 너비, 높이 넘기기


URI와 URL

  • URI (Uniform Resource Identifier) :
    자원 자체를 식별하기 위한 문자열 (이름이든, 위치든).

  • URL (Uniform Resource Locator) :
    URI의 하위 개념으로, 자원이 어디 있는지(위치)를 구체적으로 나타냄

URI : mailto:hjin3456@naver.com ← 위치가 아니라 식별자 (메일 주소)
URL : https://velog.io/@hjin3456 ← 위치 + 접속 방식까지 포함


클래스 패스기준으로 URL 얻기

Class myClass = this.getClass();
URL url = myClass.getClassLoader().getResource("home.png");

→ 이 두 줄의 최종 목적은
클래스패스 기준으로 home.png 라는 파일의 URL을 얻기 위함

  • getClassLoader() : 클래스패스를 기준으로 리소스를 찾음
  • getResource() : 클래스패스 기준으로 파일을 찾음
구성의미
getClass()현재 클래스 정보 얻기
getClass().getClassLoader()이 클래스가 메모리에 올라올 때 사용된 클래스 로더 얻기
getResource("파일명")클래스패스를 기준으로 파일 위치를 찾아 URL로 반환

현재 클래스의 클래스 로더를 통해, 클래스패스에 있는 리소스의 URL을 반환


BufferedImage

ImageIcon 자체는 크기를 지정할 수 없으므로,
아이콘 사용에 앞서 크기 조절이 가능한 이미지를 먼저 얻어야 함
BufferedImage

BufferedImage buffrImg = ImageIO.read(url); //(1)
Image img = buffrImg.getScaledInstance(width, height, Image.SCALE_SMOOTH); //(2)
icon = new ImageIcon(img); //(3)

(1) 👉 ImageIO.read()를 이용해 URL형식의 이미지 파일을 BufferedImage로 읽어들임 (BufferedImage 반환)

BufferedImage와 (Toolkit으로 얻은) Image의 차이점

  • Toolkit으로 얻는 Image는
    단순하게 화면에 보여줄 용도

  • BufferedImage는 내부 픽셀 데이터까지 접근 가능
    ➡ 이미지 가공, 크기 조절, 워터마크 처리 등 섬세하고 기술적인 이미지 제어 가능

(2) 👉 getScaledInstance() 는 간단하게 사이즈를 줄이거나 늘릴 수 있음 (Image 반환)

(2) 👉Image.SCALE_SMOOTH : "부드럽게 크기 조절해라"
(속도 느리고, 품질 높음)

(3) 👉 크기 조절된 Image를 기반으로 ImageIcon을 생성

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

0개의 댓글