이 작업은 사용자가 여러 개의 비연속적인 셀을 선택할 수 있도록 하는 것입니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!