Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java Swing에서 둥근 모양의 JTextField 구현하기

JTextFieldJTextComponent 클래스의 하위 클래스로, 사용자가 한 줄 형식(single-line)으로 텍스트 값을 입력할 수 있게 해주는 가장 중요한 컴포넌트 중 하나입니다. JTextField 내부에 입력을 시도하면 ActionListener 인터페이스가 호출되며, 대표적인 메서드로는 setText(), getText(), setEnabled() 등이 있습니다.

기본적으로 JTextField는 사각형 모양을 가지지만, RoundRectangle2D 클래스를 활용하고 paintComponent() 메서드를 오버라이드하면 둥근 모양(round-shaped)의 JTextField를 손쉽게 구현할 수 있습니다.

구현 예제

아래 예제에서는 JTextField를 상속받아 둥근 테두리와 배경을 그리는 커스텀 컴포넌트인 RoundedJTextField를 만들어 보겠습니다.

import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;

public class RoundedJTextFieldTest extends JFrame {
    private JTextField tf;

    public RoundedJTextFieldTest() {
        setTitle("RoundedJTextField Test");
        setLayout(new BorderLayout());
        tf = new RoundedJTextField(15);
        add(tf, BorderLayout.NORTH);
        setSize(375, 250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String args[]) {
        new RoundedJTextFieldTest();
    }
}

// 둥근 모양의 JTextField 구현
class RoundedJTextField extends JTextField {
    private Shape shape;

    public RoundedJTextField(int size) {
        super(size);
        setOpaque(false); // 기본 배경을 투명하게 설정
    }

    protected void paintComponent(Graphics g) {
        g.setColor(getBackground());
        g.fillRoundRect(0, 0, getWidth()-1, getHeight()-1, 15, 15);
        super.paintComponent(g);
    }

    protected void paintBorder(Graphics g) {
        g.setColor(getForeground());
        g.drawRoundRect(0, 0, getWidth()-1, getHeight()-1, 15, 15);
    }

    public boolean contains(int x, int y) {
        if (shape == null || !shape.getBounds().equals(getBounds())) {
            shape = new RoundRectangle2D.Float(0, 0, getWidth()-1, getHeight()-1, 15, 15);
        }
        return shape.contains(x, y);
    }
}

핵심 포인트 정리

  • setOpaque(false): 기본 사각형 배경을 제거하여 커스텀 배경이 그려지도록 합니다.
  • paintComponent(): fillRoundRect()를 사용해 둥근 형태의 배경을 채웁니다.
  • paintBorder(): drawRoundRect()를 사용해 둥근 테두리 선을 그립니다.
  • contains(): RoundRectangle2D 객체를 이용해 마우스 클릭 영역도 실제 둥근 모양에 맞게 조정합니다.

실행 결과

위 코드를 실행하면 아래 이미지와 같이 둥근 모서리를 가진 JTextField가 화면에 나타나는 것을 확인할 수 있습니다. 모서리 곡률 값(예제에서는 15)을 조절하면 원하는 만큼 더 둥글거나 각진 스타일로 변경할 수 있습니다.

Java Swing에서 둥근 모양의 JTextField 구현하기