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

Java Swing JList에서 더블클릭 및 Enter 키 이벤트를 감지하는 방법

JList의 더블클릭 및 Enter 키 이벤트 처리

Swing의 JListJComponent 클래스를 확장한 컴포넌트로, 사용자가 목록에서 단일 선택 또는 다중 선택을 할 수 있도록 지원합니다.

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 키를 누르면 두 번째 텍스트 필드에 해당 항목이 출력되는 것을 확인할 수 있습니다.