2013-08-15 25 views
5

मैंने कक्षा को JXTreeTable और JXTable ऑब्जेक्ट्स में उपयोग करने के उद्देश्य से बनाया है क्योंकि मेरे पास इनमें से कई परियोजनाएं हैं।कस्टम टेबलसेलरेंडर/ट्रीटेबलसेलरेंडर तालिका कक्षों को प्रस्तुत नहीं करता है

public class CustomCellRenderer extends JLabel 
           implements TreeCellRenderer, TableCellRenderer { 

    @Override 
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { 
     setBackground(selected ? new Color(83,142,213) : Color.white); 
     setForeground(selected ? Color.white : Color.black); 
     //here is the icon setting code but it's irrelevant to my problem 
     setText(value != null ? value.toString() : "<null>"); 
     return this; 
    } 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     setBackground(isSelected ? new Color(83,142,213) : Color.white); 
     setForeground(isSelected ? Color.white : Color.black); 
     setText(value != null ? value.toString() : "<null>"); 
     return this; 
    } 
} 

और यहाँ कोड है, जहां मैं रेंडरर सेट किया गया है:

jXTreeTableConsumos.setDefaultRenderer(Object.class, new CustomCellRenderer()); 
jXTreeTableConsumos.setTreeCellRenderer(new CustomCellRenderer()); 

मैं पृष्ठभूमि और अग्रभूमि नीले और सफेद हो जाते हैं क्रमशः जब एक पंक्ति है उम्मीद कर रहा हूँ तो इस वर्ग के TreeCellRenderer और TableCellRenderer इंटरफेस को लागू करता है चयनित। हालांकि यह केवल ट्री तालिका सेल (प्रथम कॉलम), जबकि केवल अग्रभाग परिवर्तन और पृष्ठभूमि बहुत ही चयनित पंक्ति में अन्य कोशिकाओं में सफेद पोस्टरों में क्या होता है:

enter image description here

किसी को भी मुझे बता सकते क्यों कोशिकाओं (हैं कि वृक्ष कोशिकाओं नहीं) उनके पृष्ठभूमि रंग नहीं बदलते हैं?

+0

कोई entendi ला सवाल – nachokk

+1

मैं डॉन समझ में नहीं आता, या तो; क्यों 'ऑब्जेक्ट.क्लास'? _what_ नीले रंग में नहीं बदलता है? कृपया एक प्रश्न [एसएससीसी] (http://sscce.org/) शामिल करने के लिए अपना प्रश्न संपादित करें जो आपके द्वारा वर्णित समस्या का प्रदर्शन करता है। – trashgod

उत्तर

7

आपकी टिप्पणियों और सुझावों के लिए सभी को धन्यवाद। मुझे JComponent#setBackground(Color bg) प्रलेखन में समाधान मिला:

इस घटक के पृष्ठभूमि रंग को सेट करता है। पृष्ठभूमि रंग प्रयुक्त केवल तभी होता है जब घटक अपारदर्शी है, और केवल JComponent या ComponentUI कार्यान्वयन के उप-वर्गों द्वारा। के प्रत्यक्ष उप-वर्गों JComponent को इस संपत्ति का सम्मान करने के लिए पेंट कॉम्पोनेंट को ओवरराइड करना होगा।

मेरी CustomCellRendererJLabel से केवल एक चीज मैं क्या करना है यकीन है कि यह अपारदर्शी है और इसके पृष्ठभूमि रंग चित्रित किया जाएगा है फैली हुई है के बाद से:

@Override 
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
    setOpaque(true);//adding this line I solved my problem 
    setBackground(isSelected ? new Color(83,142,213) : Color.white); 
    setForeground(isSelected ? Color.white : Color.black); 
    setText(value != null ? value.toString() : "<null>"); 
    return this; 
} 

enter image description here

+1

आह, 'DefaultTableCellRenderer' डिफ़ॉल्ट रूप से अपारदर्शी है; क्या इस संदर्भ में इसका इस्तेमाल किया जा सकता है? सलाह के लिए – trashgod

+1

@trashgod धन्यवाद। यह भी काम करता है! – dic19

संबंधित मुद्दे

 संबंधित मुद्दे