"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تحقيق التفرد عند إضافة أزرار الراديو إلى مجموعات JTable؟

كيفية تحقيق التفرد عند إضافة أزرار الراديو إلى مجموعات JTable؟

تم النشر بتاريخ 2024-11-22
تصفح:904

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

إضافة أزرار اختيار إلى مجموعات في JTable

بيان المشكلة

أدت محاولة إضافة أزرار اختيار إلى JTable باستخدام عارض ومحرر إلى عدم القدرة على تحقيق التفرد. يوضح مقتطف التعليمات البرمجية المقدم المشكلة.

الحل البديل

كبديل، فكر في استخدام JComboBox كمحرر للاختيارات المتبادلة داخل صف واحد. يعد هذا أسلوبًا أكثر كفاءة لإدارة المساحة وتجربة المستخدم.

مثال الكود

// ...
// 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. العارض والمحرر البديل

يمكنك إنشاء فئات العارض والمحرر المخصصة الخاصة بك لتحقيق السلوك المطلوب. إليك مثال:

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 و DefaultCellEditor

يمكنك استخدام فئتي DefaultTableCellRenderer و DefaultCellEditor مع JRadioButton المخصص الذي يتعامل مع التفرد. إليك مثال:

الطبقة العامة ExclusiveJRadioButtonتوسيع JRadioButton { مجموعة RadioButtonGroup الخاصة؛ عام حصريJRadioButton(مجموعة RadioButtonGroup) { this.group = group; addActionListener(new ActionListener() { @تجاوز إجراء باطل عام (ActionEvent e) { group.setSelected(ExclusiveJRadioButton.this, true); } }); } @تجاوز مجموعة باطلة عامة مختارة (تم تحديد منطقية) { إذا (group.isSelected(هذا)) { يعود؛ } super.setSelected(selected); }
            
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3