Ein Versuch, Optionsfelder zu einer JTable mithilfe eines Renderers und Editors hinzuzufügen, führte zu: die Unfähigkeit, Exklusivität zu erreichen. Das bereitgestellte Code-Snippet veranschaulicht das Problem.
Erwägen Sie alternativ die Verwendung einer JComboBox als Editor für sich gegenseitig ausschließende Auswahlmöglichkeiten innerhalb einer Zeile. Dies ist ein effizienterer Ansatz für die Speicherplatzverwaltung und die Benutzererfahrung.
// ... // 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. Alternativer Renderer und Editor
Sie können Ihre eigenen benutzerdefinierten Renderer- und Editor-Klassen erstellen, um das gewünschte Verhalten zu erreichen. Hier ein Beispiel:
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 und DefaultCellEditor
Sie können die Klassen DefaultTableCellRenderer und DefaultCellEditor mit einem benutzerdefinierten JRadioButton verwenden, der die Exklusivität verwaltet. Hier ist ein Beispiel:
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); } }
Das obige ist der detaillierte Inhalt vonWie erreicht man Exklusivität beim Hinzufügen von Optionsfeldern zu JTable-Gruppen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!