Rumah > Java > javaTutorial > Bagaimana untuk Mencapai Eksklusiviti Apabila Menambah Butang Radio pada Kumpulan JTable?

Bagaimana untuk Mencapai Eksklusiviti Apabila Menambah Butang Radio pada Kumpulan JTable?

Patricia Arquette
Lepaskan: 2024-11-12 06:43:02
asal
303 orang telah melayarinya

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

Menambahkan Butang Radio pada Kumpulan dalam JTable

Pernyataan Masalah

Percubaan untuk menambah butang radio pada JTable menggunakan pemapar dan editor menghasilkan ketidakupayaan untuk mencapai eksklusiviti. Coretan kod yang disediakan menunjukkan isu tersebut.

Penyelesaian Alternatif

Sebagai alternatif, pertimbangkan untuk menggunakan JComboBox sebagai editor untuk pilihan yang saling eksklusif dalam satu baris. Ini adalah pendekatan yang lebih cekap untuk pengurusan ruang dan pengalaman pengguna.

Contoh Kod

// ...
// 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;
        }
    }
}
Salin selepas log masuk

Alternatif Tambahan

1. Penyampai dan Editor Alternatif

Anda boleh membuat kelas pemapar dan editor tersuai anda sendiri untuk mencapai gelagat yang diingini. Berikut ialah contoh:

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;
    }
}
Salin selepas log masuk

2. DefaultTableCellRenderer dan DefaultCellEditor

Anda boleh menggunakan kelas DefaultTableCellRenderer dan DefaultCellEditor dengan JRadioButton tersuai yang mengendalikan eksklusiviti. Berikut ialah contoh:

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);
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Eksklusiviti Apabila Menambah Butang Radio pada Kumpulan JTable?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan