>  기사  >  Java  >  JTable 그룹에 라디오 버튼을 추가할 때 독점성을 달성하는 방법은 무엇입니까?

JTable 그룹에 라디오 버튼을 추가할 때 독점성을 달성하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-12 06:43:02302검색

How to Achieve Exclusivity When Adding Radio Buttons to JTable Groups?

JTable의 그룹에 라디오 버튼 추가

문제 설명

렌더러와 편집기를 사용하여 JTable에 라디오 버튼을 추가하려고 하면 독점성을 달성할 수 없음. 제공된 코드 조각은 문제를 보여줍니다.

대체 솔루션

대안으로 JComboBox를 행 내에서 상호 배타적인 선택 항목에 대한 편집기로 사용하는 것을 고려해 보십시오. 이는 공간 관리 및 사용자 경험을 위한 보다 효율적인 접근 방식입니다.

코드 예시

// ...
// Import declarations
// ...

public class JRadioAsRendererEditor extends JPanel {

    // ...
    // Class variables and methods
    // ...

    private class StatusRenderer extends StatusPanel implements TableCellRenderer {

        // ...
        // Overridden methods
        // ...

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
            setStatus((Status) value);
            if (isSelected) {
                setBackground(table.getSelectionBackground());
            } else {
                setBackground(table.getBackground());
            }
            return this;
        }
    }
}

추가 대안

1. 대체 렌더러 및 편집기

원하는 동작을 달성하기 위해 자신만의 사용자 정의 렌더러 및 편집기 클래스를 만들 수 있습니다. 예는 다음과 같습니다.

public class RadioCellRenderer extends DefaultTableCellRenderer {

    private RadioButtonGroup group;

    public RadioCellRenderer(RadioButtonGroup group) {
        this.group = group;
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
        boolean isSelected, boolean hasFocus, int row, int column) {
        JRadioButton button = (JRadioButton) value;
        button.setSelected(group.isSelected(button));
        return button;
    }
}

public class RadioCellEditor extends DefaultCellEditor {

    private RadioButtonGroup group;

    public RadioCellEditor(JRadioButtonCheckBox box, RadioButtonGroup group) {
        super(box);
        this.group = group;
    }

    @Override
    public Object getCellEditorValue() {
        return delegate.get();
    }

    @Override
    public Component getTableCellEditorComponent(JTable table, Object value,
        boolean isSelected, int row, int column) {
        JRadioButton button = (JRadioButton) value;
        if (group.isClearable()) {
            group.clearSelection();
        }
        group.add(button);
        return button;
    }
}

2. DefaultTableCellRenderer 및 DefaultCellEditor

배타성을 처리하는 사용자 정의 JRadioButton과 함께 DefaultTableCellRenderer 및 DefaultCellEditor 클래스를 사용할 수 있습니다. 예는 다음과 같습니다.

public class ExclusiveJRadioButton extends JRadioButton {

    private RadioButtonGroup group;

    public ExclusiveJRadioButton(RadioButtonGroup group) {
        this.group = group;
        addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                group.setSelected(ExclusiveJRadioButton.this, true);
            }
        });
    }

    @Override
    public void setSelected(boolean selected) {
        if (group.isSelected(this)) {
            return;
        }
        super.setSelected(selected);
    }
}

위 내용은 JTable 그룹에 라디오 버튼을 추가할 때 독점성을 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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