وظيفة اختيار الصف معطل بعد استخدام عارض الخلية

StackOverflow https://stackoverflow.com/questions/4254495

  •  27-09-2019
  •  | 
  •  

سؤال

أنا كليري أفعل شيئًا خاطئًا. سيكون تخميني هو المكون ، ولكن هذه هي المشكلة. هذا هو عارض الخلايا الخاص بي:

public class WildcardCellRenderer implements TableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {

        JTextField c = new JTextField();
        c.setBorder(javax.swing.BorderFactory.createEmptyBorder());

        if(vColIndex == 2){
            if((Integer)value == 0) c.setText("No") ;
            else c.setText("Si");
        } else c.setText(value.toString());

        return c;
    }

}

وهذه هي الطريقة التي قمت بإعدادها في اللوحة الخاصة بي:

    this.table.setDefaultRenderer(Object.class, new WildcardCellRenderer() );

المشكلة هي أنه عندما أقوم بإعداد هذا العارض ، تصبح الصفوف غير قابلة للتحديد. هل يجب أن أستخدم مكونًا مختلفًا لعرض ما أحتاج إلى عرضه؟ في الأساس ، أعرض قيمة 0/1 كقيمة NO/YES.

هل كانت مفيدة؟

المحلول

تحتاج إلى أخذ قيمة "Isselected" في الاعتبار وإعداد لون الخلفية وفقًا لذلك:

 if (isSelected) {
        c.setBackground(table.getSelectionBackground());
        c.setForeground(table.getSelectionForeground());
    }
    else {
        c.setBackground(table.getBackground());
        c.setForeground(table.getForeground());
    }

لقد أخذت هذا من أحد محرمي ListCellRender ، لكنني أفترض أنه يعمل على نفس المنوال مع TableCellrenderers.

أوه ، راجع للشغل ، يمكنك إعادة استخدام حقل النص ، ليست هناك حاجة لإنشاء ملعب نصي جديد لكل خلية ، حتى تتمكن اللون وإعادته. وبهذه الطريقة ، لا ينتهي بك الأمر بمليون مثيلات حقل على طاولة كبيرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top