وظيفة اختيار الصف معطل بعد استخدام عارض الخلية
-
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.
أوه ، راجع للشغل ، يمكنك إعادة استخدام حقل النص ، ليست هناك حاجة لإنشاء ملعب نصي جديد لكل خلية ، حتى تتمكن اللون وإعادته. وبهذه الطريقة ، لا ينتهي بك الأمر بمليون مثيلات حقل على طاولة كبيرة.
لا تنتمي إلى StackOverflow