Une tentative d'ajout de boutons radio à une JTable à l'aide d'un moteur de rendu et d'un éditeur a abouti à l'incapacité d'obtenir l'exclusivité. L'extrait de code fourni illustre le problème.
Comme alternative, envisagez d'utiliser une JComboBox comme éditeur pour des choix mutuellement exclusifs dans une rangée. Il s'agit d'une approche plus efficace pour la gestion de l'espace et l'expérience utilisateur.
// ... // 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. Moteur de rendu et éditeur alternatif
Vous pouvez créer vos propres classes de rendu et d'éditeur personnalisées pour obtenir le comportement souhaité. Voici un exemple :
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 et DefaultCellEditor
Vous pouvez utiliser les classes DefaultTableCellRenderer et DefaultCellEditor avec un JRadioButton personnalisé qui gère l'exclusivité. Voici un exemple :
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); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!