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

Java JList 선택 모드(SelectionMode)의 3가지 유형과 사용 예제

JListJComponent 클래스를 확장한 Swing 컴포넌트로, 객체 목록을 화면에 표시하고 사용자가 하나 이상의 항목을 선택할 수 있도록 해줍니다. Java에서 JList의 선택 동작을 제어하려면 ListSelectionModel 인터페이스에서 제공하는 선택 모드를 설정해야 합니다.

JList의 3가지 선택 모드

JList에는 총 세 가지 선택 모드가 존재합니다.

  • ListSelectionModel.SINGLE_SELECTION: 한 번에 목록의 단 하나의 인덱스만 선택할 수 있습니다.
  • ListSelectionModel.SINGLE_INTERVAL_SELECTION: 한 번에 하나의 연속된 구간(contiguous interval)만 선택할 수 있습니다.
  • ListSelectionModel.MULTIPLE_INTERVAL_SELECTION: 선택 항목에 어떠한 제약도 없으며, 연속되지 않은 여러 항목도 자유롭게 선택할 수 있습니다. 이 모드는 기본값(default)입니다.

예제 코드

아래 예제는 라디오 버튼을 통해 세 가지 선택 모드를 실시간으로 전환하며 테스트할 수 있는 프로그램입니다.

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

public class JListSelectionModeTest extends JFrame implements ActionListener {
    private JList list;
    private DefaultListModel listModel;

    public JListSelectionModeTest() {
        setTitle("JListSelectionMode Test");
        setLayout(new BorderLayout());
        listModel = new DefaultListModel();
        for (int i = 1; i < 10; i++) {
            listModel.addElement("list item #" + i);
        }
        list = new JList(listModel);
        add(new JScrollPane(list), BorderLayout.CENTER);

        JPanel panel = new JPanel(new GridLayout(3, 1));
        JRadioButton rb1 = new JRadioButton("SINGLE_SELECTION");
        rb1.addActionListener(this);
        JRadioButton rb2 = new JRadioButton("SINGLE_INTERVAL_SELECTION");
        rb2.addActionListener(this);
        JRadioButton rb3 = new JRadioButton("MULTIPLE_INTERVAL_SELECTION");
        rb3.addActionListener(this);

        ButtonGroup bg = new ButtonGroup();
        bg.add(rb1);
        bg.add(rb2);
        bg.add(rb3);
        panel.add(rb1);
        panel.add(rb2);
        panel.add(rb3);
        add(panel, BorderLayout.NORTH);

        setSize(350, 275);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent ae) {
        if (ae.getActionCommand().equals("SINGLE_SELECTION"))
            list.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        else if (ae.getActionCommand().equals("SINGLE_INTERVAL_SELECTION"))
            list.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        else if (ae.getActionCommand().equals("MULTIPLE_INTERVAL_SELECTION"))
            list.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    }

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

실행 결과

프로그램을 실행하면 상단에 세 개의 라디오 버튼이 배치되고, 버튼을 클릭할 때마다 getSelectionModel().setSelectionMode() 메서드를 통해 해당 선택 모드로 즉시 전환됩니다. 각 모드에 따라 마우스나 키보드(Ctrl, Shift 키 조합 등)로 항목을 선택했을 때의 동작 방식이 달라지는 것을 확인할 수 있습니다.