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

Java에서 JTable 행의 더블 클릭 이벤트를 감지하는 방법

JTable은 복잡한 데이터 구조를 화면에 표시하기 위한 JComponent의 하위 클래스입니다. JTable은 MVC(Model View Controller) 디자인 패턴을 따르며, 데이터를 행과 열 형태로 깔끔하게 보여줄 수 있습니다. 또한 JTable은 TableModelListener, TableColumnModelListener, ListSelectionListener, CellEditorListener, RowSorterListener 등 다양한 리스너 인터페이스를 통해 이벤트를 처리할 수 있습니다.

JTable에서 더블 클릭 이벤트를 감지하려면 MouseAdapter 클래스나 MouseListener 인터페이스를 활용하면 됩니다. 핵심은 MouseEvent 객체의 getClickCount() 메서드 반환값이 '2'일 때, 즉 클릭이 두 번 발생했을 때 원하는 동작을 실행하도록 처리하는 것입니다.

예제 코드

아래 예제는 JTable의 특정 셀을 더블 클릭하면 해당 셀의 값을 다이얼로그로 보여주는 프로그램입니다. 편집 모드가 자동으로 활성화되지 않도록 editCellAt() 메서드를 오버라이드하여 false를 반환하도록 설정했습니다.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

public final class DoublClickJTableRowTest extends JFrame {
    private JTable table;
    private JScrollPane scrollPane;

    public DoublClickJTableRowTest() {
        setTitle("DoublClickJTableRow Test");
        String[] columnNames = {"First Name", "Last Name"};
        Object[][] data = {{"Raja", "Ramesh"}, {"Adithya", "Sai"}, {"Vineet", "Kumar"}, {"Krishna", "Kasyap"}};

        table = new JTable(data, columnNames) {
            // 셀 편집 비활성화
            public boolean editCellAt(int row, int column, java.util.EventObject e) {
                return false;
            }
        };
        table.setFocusable(false);

        table.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent me) {
                if (me.getClickCount() == 2) {   // 더블 클릭 이벤트 감지
                    JTable target = (JTable) me.getSource();
                    int row = target.getSelectedRow();       // 선택된 행
                    int column = target.getSelectedColumn(); // 선택된 열
                    JOptionPane.showMessageDialog(null, table.getValueAt(row, column)); // 해당 셀의 값 가져오기
                }
            }
        });

        scrollPane = new JScrollPane(table);
        add(scrollPane);
        setSize(375, 250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

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

실행 결과

프로그램을 실행하면 이름과 성이 표시된 테이블이 나타납니다. 임의의 셀을 한 번 클릭하면 아무 일도 일어나지 않지만, 더블 클릭하면 해당 셀의 값이 팝업 다이얼로그에 표시됩니다.

Java에서 JTable 행의 더블 클릭 이벤트를 감지하는 방법

핵심 포인트 정리

  • MouseAdapter를 상속하면 필요한 메서드만 오버라이드할 수 있어 코드가 간결해집니다.
  • getClickCount() == 2 조건을 통해 더블 클릭 여부를 정확히 판별할 수 있습니다.
  • editCellAt()을 오버라이드해 false를 반환하면 더블 클릭 시 셀이 편집 모드로 전환되는 기본 동작을 막을 수 있습니다.
  • getSelectedRow()getSelectedColumn()으로 사용자가 선택한 위치를 파악하고, getValueAt()으로 실제 데이터를 읽어올 수 있습니다.