Maison > Java > javaDidacticiel > le corps du texte

Comment obtenir l'exclusivité lors de l'ajout de boutons radio aux groupes JTable ?

Patricia Arquette
Libérer: 2024-11-12 06:43:02
original
292 Les gens l'ont consulté

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

Ajout de boutons radio à des groupes dans une JTable

Énoncé du problème

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.

Solution alternative

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.

Exemple de code

// ...
// 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;
        }
    }
}
Copier après la connexion

Alternatives supplémentaires

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;
    }
}
Copier après la connexion

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);
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal