JComboBox는 JComponent 클래스의 하위 클래스로, 텍스트 필드와 사용자가 값을 선택할 수 있는 드롭다운 목록을 하나로 결합한 컴포넌트입니다. 사용자가 콤보 박스를 조작하면 ActionListener, ChangeListener, ItemListener 인터페이스를 통해 이벤트가 발생합니다.
JComboBox의 각 항목에 테두리를 적용하려면 DefaultListCellRenderer 클래스를 상속받는 커스텀 렌더러를 만들고, 그 안에서 getListCellRendererComponent() 메서드를 재정의(오버라이드)해야 합니다. 이 메서드는 목록의 각 셀이 화면에 그려질 때마다 호출되므로, 여기서 반환되는 컴포넌트(보통 JLabel)에 원하는 테두리와 배경색을 지정할 수 있습니다.
getListCellRendererComponent() 메서드 구문
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus)
각 매개변수의 의미는 다음과 같습니다.
- list: 렌더링 대상이 되는 JList 객체
- value: 현재 셀에 표시될 값
- index: 셀의 인덱스 (0부터 시작)
- isSelected: 해당 셀이 선택된 상태인지 여부
- cellHasFocus: 해당 셀이 포커스를 가지고 있는지 여부
예제 코드
아래 예제에서는 도시 이름 목록을 가진 JComboBox를 생성하고, 커스텀 렌더러를 통해 각 항목에 빈 테두리(여백)와 연회색 배경을 적용합니다.
import java.awt.*;
import javax.swing.*;
public class JComboBoxTest extends JFrame {
public JComboBoxTest() {
setTitle("JComboBox Test");
String[] cities = {"Hyderabad", "Mumbai", "Pune", "Bangalore", "Chennai", "Coimbatore"};
JComboBox jcb = new JComboBox(cities);
jcb.setRenderer(new CustomComboBoxRenderer());
add(jcb, BorderLayout.NORTH);
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
class CustomComboBoxRenderer extends DefaultListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
JLabel lbl = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
lbl.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7));
lbl.setBackground(Color.lightGray);
return lbl;
}
}
public static void main(String[] args) {
new JComboBoxTest();
}
}코드 설명
- CustomComboBoxRenderer: DefaultListCellRenderer를 상속하여 부모 클래스의 기본 렌더링 결과를 JLabel로 받은 뒤 스타일을 변경합니다.
- BorderFactory.createEmptyBorder(7, 7, 7, 7): 상, 좌, 하, 우 방향으로 각각 7픽셀의 여백을 가진 빈 테두리를 생성하여 항목 사이에 시각적인 간격을 만듭니다.
- lbl.setBackground(Color.lightGray): 각 항목의 배경색을 연회색으로 지정합니다.
실행 결과
프로그램을 실행하면 프레임 상단에 콤보 박스가 나타나며, 드롭다운 목록을 펼치면 각 도시 항목에 여백 테두리와 회색 배경이 적용된 것을 확인할 수 있습니다.
