„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie erreicht man Exklusivität beim Hinzufügen von Optionsfeldern zu JTable-Gruppen?

Wie erreicht man Exklusivität beim Hinzufügen von Optionsfeldern zu JTable-Gruppen?

Veröffentlicht am 22.11.2024
Durchsuche:452

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

Hinzufügen von Optionsfeldern zu Gruppen in einer JTable

Problemstellung

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.

Alternative Lösung

Alternativ können Sie eine JComboBox als Editor für sich gegenseitig ausschließende Auswahlmöglichkeiten innerhalb einer Zeile verwenden. Dies ist ein effizienterer Ansatz für die Speicherplatzverwaltung und das Benutzererlebnis.

Codebeispiel

// ...
// 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;
        }
    }
}

Zusätzliche Alternativen

1. Alternativer Renderer und Editor

Sie können Ihre eigenen benutzerdefinierten Renderer- und Editor-Klassen erstellen, um das gewünschte Verhalten zu erreichen. Hier ist 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);
    }
}
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3