>  기사  >  Java  >  JTable에서 비연속 셀 선택을 허용하는 방법은 무엇입니까?

JTable에서 비연속 셀 선택을 허용하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-23 08:26:36684검색

How to Allow Non-Continuous Cell Selection in a JTable?

개별적이고 비연속적인 JTable 셀 선택 허용

요구 사항 이해

이 작업은 사용자가 여러 개의 비연속적인 셀을 선택할 수 있도록 하는 것입니다. JTable을 사용하면 연속 셀 그룹을 넘어 더욱 유연한 셀 선택이 가능합니다.

탐색하기 솔루션

1. ListSelectionModel 활용

JTable의 setSelectionModel() 메서드를 사용하면 선택 모델을 사용자 정의할 수 있습니다. ListSelectionModel.SINGLE_SELECTION으로 설정하고 InputEvent.CTRL_MASK를 처리하는 리스너를 추가하면 비연속적인 셀 선택을 구현할 수 있습니다.

2. MouseEvent 처리 사용자 정의

JTable의 processMouseEvent() 메서드를 재정의하면 이벤트 수정자를 수정하여 Ctrl 키를 눌렀음을 나타낼 수 있습니다. 이렇게 하면 테이블이 마치 사용자가 Ctrl 키를 누르고 있는 것처럼 동작하여 여러 셀을 선택할 수 있습니다.

3. 사용자 정의 목록 선택 모델 구현

내장된 선택 모델이 요구 사항을 충족하지 않는 경우 원하는 방식으로 셀 선택을 관리하는 자체 ListSelectionModel 구현을 만들 수 있습니다.

4. 구현 예

다음 코드 조각은 JTable에서 비연속 셀 선택을 허용하기 위한 사용자 정의 processMouseEvent() 접근 방식을 보여주는 SSCCE를 제공합니다.

import java.awt.Component;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class TableSelection extends JFrame {

    public TableSelection() {
        JPanel main = new JPanel();

        // Initialize table data
        String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"};
        Object[][] data = {
            {"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false)},
            {"John", "Doe", "Rowing", new Integer(3), new Boolean(true)},
            {"Sue", "Black", "Knitting", new Integer(2), new Boolean(false)},
            {"Jane", "White", "Speed reading", new Integer(20), new Boolean(true)},
            {"Joe", "Brown", "Pool", new Integer(10), new Boolean(false)}
        };

        // Override processMouseEvent to add control modifier
        JTable table = new JTable(data, columnNames) {
            @Override
            protected void processMouseEvent(MouseEvent e) {
                int modifiers = e.getModifiers() | InputEvent.CTRL_MASK;
                MouseEvent myME = new MouseEvent((Component) e.getSource(), e.getID(), e.getWhen(), modifiers, e.getX(),
                        e.getY(), e.getXOnScreen(), e.getYOnScreen(), e.getClickCount(), e.isPopupTrigger(), e.getButton());
                super.processMouseEvent(myME);
            }
        };
        JScrollPane pane = new JScrollPane(table);
        main.add(pane);
        this.add(main);
    }

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

이 구현을 통해 다음을 수행할 수 있습니다. Ctrl 키를 누른 채 원하는 셀을 클릭하면 연속되지 않은 셀을 선택할 수 있습니다.

위 내용은 JTable에서 비연속 셀 선택을 허용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.