JList는 JComponent 클래스의 하위 클래스로, 사용자가 단일 항목 또는 여러 항목을 선택할 수 있도록 지원하는 Swing 컴포넌트입니다. JList는 ListSelectionListener 인터페이스를 사용할 수 있으며, 이 인터페이스에는 추상 메서드인 valueChanged()가 포함되어 있습니다.
JList에서 항목이 선택되었을 때 해당 값을 화면에 표시하려면 MouseListener 인터페이스를 구현하거나 MouseAdapter 클래스를 상속한 뒤, MouseEvent 클래스의 getClickCount() 메서드를 호출하여 단일 클릭 이벤트(getClickCount() == 1)를 감지하면 됩니다.
구현 예제
아래 예제 코드는 JList의 항목을 한 번 클릭하면 선택된 값이 팝업 대화상자로 표시되도록 구현한 것입니다.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class JListItemSeletionTest extends JFrame {
private JList list;
private JScrollPane jsp;
private Vector data;
public JListItemSeletionTest() {
setTitle("JListItemSeletion Test");
list = new JList();
data = new Vector();
data.addElement("India");
data.addElement("Australia");
data.addElement("England");
data.addElement("England");
data.addElement("New Zealand");
data.addElement("South Africa");
list.setListData(data);
list.setSelectedIndex(0);
list.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
if (me.getClickCount() == 1) {
JList target = (JList)me.getSource();
int index = target.locationToIndex(me.getPoint());
if (index >= 0) {
Object item = target.getModel().getElementAt(index);
JOptionPane.showMessageDialog(null, item.toString());
}
}
}
});
jsp = new JScrollPane(list);
add(jsp, BorderLayout.NORTH);
setSize(400, 275);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String args[]) {
new JListItemSeletionTest();
}
}코드 설명
- 데이터 추가: Vector 객체에 국가 이름들을 요소로 추가한 후 setListData() 메서드로 JList에 바인딩합니다.
- 마우스 이벤트 처리: MouseAdapter를 상속하여 mouseClicked() 메서드를 오버라이드하고, getClickCount()가 1일 때(단일 클릭) 로직을 실행합니다.
- 선택 항목 확인: locationToIndex()로 클릭 위치의 인덱스를 얻고, getModel().getElementAt(index)로 해당 항목의 값을 가져옵니다.
- 값 표시: JOptionPane.showMessageDialog()를 통해 선택된 값을 대화상자로 출력합니다.
실행 결과
프로그램을 실행하면 국가 목록이 담긴 JList가 나타나며, 목록에서 항목을 한 번 클릭하면 아래와 같이 선택된 값이 팝업 창으로 표시됩니다.
