>Java >java지도 시간 >여러 행 선택을 위해 JTable에서 연결된 확인란을 구현하는 방법은 무엇입니까?

여러 행 선택을 위해 JTable에서 연결된 확인란을 구현하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-05 19:43:11307검색

How to Implement Linked Checkboxes in a JTable for Multiple Row Selection?

여러 행 선택 및 모든 확인란 선택

JTable에서 한 열은 편집할 수 없는 텍스트로 구성되고 다른 열은 부울 값에 대한 확인란 제어 기능을 제공하는 일반적인 요구 사항 체크박스를 연결하는 것입니다. 즉, 여러 행을 선택하고 확인란을 선택 취소하면 선택한 다른 모든 확인란도 선택 취소됩니다. 마찬가지로, 확인란을 선택하면 선택한 모든 확인란이 이에 따라야 합니다.

연결된 확인란 구현

DataModel 클래스 구현:

  • DefaultTableModel 클래스를 확장하여 재정의된 사용자 정의 DataModel을 생성합니다. 메소드:

    • getColumnClass(int columnIndex): 체크박스 열의 클래스 유형을 반환합니다(Boolean.class).
    • isCellEditable(int row, int columns): 셀 편집만 허용 체크박스에 열.

버튼이 있는 제어판 만들기:

  • 모두 지우거나 확인하는 버튼이 있는 제어판 추가 확인란을 선택했습니다.

생성 SelectionAction 클래스:

  • 버튼 이벤트를 처리하는 액션 클래스를 구현합니다.
  • 생성자는 원하는 액션(지우기 또는 확인)을 나타내는 부울 값을 허용합니다.
  • actionPerformed 메소드는 선택한 행을 반복하고 체크박스 값을 업데이트합니다.

샘플 코드:**

다음 코드 조각은 구현을 보여줍니다.

import java.awt.*;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.DefaultListSelectionModel;
import javax.swing.table.DefaultTableModel;

public class MultipleRowSelection extends JPanel {

    private static final int CHECK_COL = 1;
    private static final Object[][] DATA = {
        {"One", Boolean.TRUE}, {"Two", Boolean.FALSE},
        {"Three", Boolean.TRUE}, {"Four", Boolean.FALSE},
        {"Five", Boolean.TRUE}, {"Six", Boolean.FALSE},
        {"Seven", Boolean.TRUE}, {"Eight", Boolean.FALSE},
        {"Nine", Boolean.TRUE}, {"Ten", Boolean.FALSE}};
    private static final String[] COLUMNS = {"Number", "CheckBox"};
    private DataModel dataModel = new DataModel(DATA, COLUMNS);
    private JTable table = new JTable(dataModel);
    private DefaultListSelectionModel selectionModel;

    public MultipleRowSelection() {
        super(new BorderLayout());
        this.add(new JScrollPane(table));
        this.add(new ControlPanel(), BorderLayout.SOUTH);
        table.setPreferredScrollableViewportSize(new Dimension(250, 175));
        selectionModel = (DefaultListSelectionModel) table.getSelectionModel();
    }

    private class DataModel extends DefaultTableModel {

        public DataModel(Object[][] data, Object[] columnNames) {
            super(data, columnNames);
        }

        @Override
        public Class<?> getColumnClass(int columnIndex) {
            if (columnIndex == CHECK_COL) {
                return getValueAt(0, CHECK_COL).getClass();
            }
            return super.getColumnClass(columnIndex);
        }

        @Override
        public boolean isCellEditable(int row, int column) {
            return column == CHECK_COL;
        }
    }

    private class ControlPanel extends JPanel {

        public ControlPanel() {
            this.add(new JLabel("Selection:"));
            this.add(new JButton(new SelectionAction("Clear", false)));
            this.add(new JButton(new SelectionAction("Check", true)));
        }
    }

    private class SelectionAction extends AbstractAction {

        boolean value;

        public SelectionAction(String name, boolean value) {
            super(name);
            this.value = value;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            for (int i = 0; i < dataModel.getRowCount(); i++) {
                if (selectionModel.isSelectedIndex(i)) {
                    dataModel.setValueAt(value, i, CHECK_COL);
                }
            }
        }
    }

    private static void createAndShowUI() {
        JFrame frame = new JFrame("MultipleRowSelection");
        frame.add(new MultipleRowSelection());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                createAndShowUI();
            }
        });
    }
}

결론

이러한 클래스를 구현하여 액션 리스너를 사용하면 JTable에서 여러 행을 선택하고 해당 확인란을 전체적으로 토글하여 사용자 경험을 향상하고 데이터 조작을 간소화합니다.

위 내용은 여러 행 선택을 위해 JTable에서 연결된 확인란을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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