"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > JTable에서 비연속 셀 선택을 활성화하는 방법은 무엇입니까?

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

2024년 11월 16일에 게시됨
검색:938

How to Enable Non-Continuous Cell Selection in JTable?

JTable에서 비연속 셀 선택

JTable에서 기본 선택 모드에서는 연속 셀 선택만 허용됩니다. 개별적이고 비연속적인 셀 선택을 활성화하려면 다음 접근 방식을 고려할 수 있습니다.

1. CTRL MOUSE_CLICK:

setSelectionMode(ListSelectionModel.SINGLE_SELECTION)가 설정되지 않은 경우 Ctrl 키를 누른 채 셀을 클릭하면 여러 개의 비연속 셀 선택이 가능합니다.

2. 수정된 ListSelectionModel:

ListSelectionModel은 JTable과 JList 모두에서 공유되므로 다음 수정된 ListSelectionModel을 사용할 수 있습니다.

import java.awt.Component;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;

import javax.swing.*;

public class NonContSelectionModel extends DefaultListSelectionModel {

    @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);
    }
}

이 모델은 setSelectionModel(new NonContSelectionModel())을 사용하여 JTable에 적용할 수 있습니다.

Demonstration:

다음 코드 조각은 수정된 ListSelectionModel:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;

public class NonContJTableSelection {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JPanel panel = new JPanel();
                String[] columnNames = {"Name", "Age", "Profession"};
                Object[][] data = {
                        {"John Doe", 30, "Software Engineer"},
                        {"Jane Doe", 28, "Doctor"},
                        {"Peter Jones", 45, "Lawyer"}
                };
                JTable table = new JTable(data, columnNames);
                table.setSelectionModel(new NonContSelectionModel());
                JScrollPane scrollPane = new JScrollPane(table);
                panel.add(scrollPane);

                frame.add(panel);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3