JList의 더블클릭 및 Enter 키 이벤트 처리
Swing의 JList는 JComponent 클래스를 확장한 컴포넌트로, 사용자가 목록에서 단일 선택 또는 다중 선택을 할 수 있도록 지원합니다.
JList에서 발생하는 다양한 이벤트를 처리하려면 다음과 같은 리스너 인터페이스를 활용할 수 있습니다.
- ListSelectionListener: 선택 값이 변경될 때 호출되는 추상 메서드
valueChanged()를 포함합니다. - MouseListener: 목록에서 더블클릭(double-click) 이벤트를 감지할 때 사용합니다.
- KeyListener: 목록에서 Enter 키 입력 이벤트를 감지할 때 사용합니다.
구현 예제 코드
아래 예제는 JList에서 더블클릭과 Enter 키 입력을 각각 감지하여, 해당 결과를 별도의 텍스트 필드에 출력하는 프로그램입니다.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
public class JListTest extends JFrame {
public JListTest() {
setTitle("JList Test");
setLayout(new FlowLayout());
Vector v = new Vector();
for (int i = 1; i < 15; i++) {
v.addElement("Item #" + i);
}
add(new JLabel("Double-clicked on: "));
final JTextField dblTextField = new JTextField(15);
add(dblTextField);
add(new JLabel("Enter key on: "));
final JTextField entTextField = new JTextField(15);
add(entTextField);
final JList list = new JList(v);
// 더블클릭 이벤트 감지
list.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
if (me.getClickCount() == 2) {
dblTextField.setText(""+list.getSelectedValue());
}
}
});
// Enter 키 이벤트 감지
list.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent ke) {
if(ke.getKeyCode() == KeyEvent.VK_ENTER) {
entTextField.setText(""+list.getSelectedValue());
}
}
});
add(new JScrollPane(list));
setSize(375, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new JListTest();
}
}코드 설명
- 더블클릭 감지:
MouseAdapter를 상속받아mouseClicked()메서드를 재정의하고,me.getClickCount() == 2조건으로 더블클릭 여부를 판별합니다. 더블클릭이 확인되면 현재 선택된 항목을dblTextField에 표시합니다. - Enter 키 감지:
KeyAdapter를 상속받아keyReleased()메서드를 재정의하고,ke.getKeyCode() == KeyEvent.VK_ENTER조건으로 Enter 키 입력 여부를 확인합니다. Enter 키가 눌리면 선택된 항목을entTextField에 표시합니다.
실행 결과
프로그램을 실행하면 1번부터 14번까지의 항목이 담긴 리스트가 스크롤 창에 표시됩니다. 목록의 항목을 더블클릭하면 첫 번째 텍스트 필드에 해당 항목이 출력되고, 항목을 선택한 후 Enter 키를 누르면 두 번째 텍스트 필드에 해당 항목이 출력되는 것을 확인할 수 있습니다.