렌더러와 편집기를 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!