[java] 자바 스윙 컴포넌트에서 컴포넌트에 그림자 효과를 추가하는 방법은 어떻게 되나요?

아래는 JLayer 클래스를 사용하여 그림자 효과를 추가하는 간단한 예제입니다.

import javax.swing.*;
import java.awt.*;
import org.jdesktop.swingx.JXLayer;

public class ShadowEffectExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("그림자 효과 예제");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        JLabel label = new JLabel("그림자 효과");
        label.setFont(new Font("Arial", Font.PLAIN, 20));
        
        JXLayer<JLabel> jxLayer = new JXLayer<>(label);
        jxLayer.setUI(new ShadowLayerUI());

        frame.add(jxLayer);
        
        frame.setSize(300, 200);
        frame.setVisible(true);
    }
}

class ShadowLayerUI extends LayerUI<JComponent> {
    @Override
    public void paint(Graphics g, JComponent c) {
        Graphics2D g2 = (Graphics2D) g.create();
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setColor(Color.BLACK);
        g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
        g2.fillRoundRect(10, 10, c.getWidth() - 20, c.getHeight() - 20, 15, 15);
        g2.dispose();
        super.paint(g, c);
    }
}

위의 예제는 JLayer 클래스와 LayerUI 클래스를 사용하여 JLabel에 그림자 효과를 추가하는 방법을 보여줍니다. 위의 코드를 실행하면 “그림자 효과” 텍스트가 있는 창이 표시되고 텍스트 주변에 그림자 효과가 나타납니다.

더 복잡한 그림자 효과를 구현하려면 LayerUI 클래스를 상속받아 원하는 형태의 그림자를 그리는 코드를 작성하면 됩니다.