2009-05-03 25 views
7

यह मुझे बिल्कुल पागल कर रहा है।जेटीबल सेल रंग बदलना

मुझे पता है कि, जेटीबल के साथ तालिका कोशिकाओं के स्वरूपण को बदलने के लिए, मुझे अपने स्वयं के प्रस्तुतकर्ता का उपयोग करना होगा। लेकिन मैं इसे ठीक से लागू नहीं कर सकता।

यह मेरा मौजूदा सेटअप है:

public class MyClass 
{ 
    public static void main(String args[]) 
    { 
     JTable myTable = new JTable(10, 10); 
     myTable.setDefaultRenderer ([I dont know what to put here], new CustomRenderer()); 
    } 
} 

class CustomRenderer extends DefaultTableCellRenderer 
{ 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

     // Formatting 
     return c; 
    } 
} 

क्या मैं setDefaultRenderer के पहले पैरामीटर के लिए उपयोग करने के लिए की जरूरत है? एपीआई सिर्फ 'कक्षा' कहता है। मुझे नहीं पता कि वहां क्या रखा जाए।

क्या कोई बस शब्दों के सबसे सरल तरीके से समझा सकता है, मैं इसे लागू करने के बारे में कैसे जाता हूं? कृपया उदाहरण दें कि मैं प्रारूपण को main() विधि के भीतर से कैसे बदल सकता हूं।

उत्तर

13

setDefaultRenderer के लिए पहले पैरामीटर में, कक्षा है कि आप प्रतिपादन ओवरराइड करने के लिए चाहते हैं के लिए वर्ग शाब्दिक डाल दिया। यानी, अपने डेटा तार के सभी मिलकर बनता है, तो आप रख सकते हैं

myTable.setDefaultRenderer(String.class, new CustomRenderer()); 

अपने डेटा भी BigDecimal या Integer वर्ग के रूप में के साथ मूल्यों के मिलन हैं, तो आप प्रत्येक वर्ग के प्रकार (BigDecimal.class या Integer.class के लिए कि विधि कई बार आह्वान करने के लिए है प्रत्येक मामले में)।

और अंत में, पृष्ठभूमि रंग आप अपने रेंडरर में ऐसा बदलने के लिए:

class CustomRenderer extends DefaultTableCellRenderer 
{ 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
     c.setBackground(new java.awt.Color(255, 72, 72)); 
     return c; 
    } 
} 

आप एक रेंडरर लिखते हैं कि एक अंतरफलक के सभी वर्गों के लिए काम करना चाहिए, आप भी संशोधित करने की आवश्यकता होगी अपने तालिका मॉडल की getColumnClass समारोह है और यह सभी वस्तुओं है कि इस इंटरफ़ेस को लागू करने के लिए इंटरफ़ेस वर्ग वापसी करते हैं:

public Class<? extends Object> getColumnClass(int c) { 
    Object object = getValueAt(0, c); 
    if(object == null) { 
     return Object.class; 
    if(getValueAt(0, c) instanceof IColorable) { 
     return ICarPart.class; 
    } else { 
     return getValueAt(0, c).getClass(); 
    } 
} 

वाई वें कि कोई IColorable.class के लिए एक रेंडरर पंजीकृत कर सकता है और प्रत्येक कार्यान्वयन के लिए एक अलग रेंडरर पंजीकृत करने की आवश्यकता नहीं है।

+0

यह मेरे लिए काम नहीं करता प्रतीत होता है। एकमात्र चीज जो मैंने किया है वह setDefaultRenderer विधि का आह्वान करता है और कस्टम रेंडरर क्लास बनाता है। क्या काम करने के लिए मुझे कुछ और करने की ज़रूरत है? –

+2

मुझे यह String.class के बजाय ऑब्जेक्ट.क्लास का उपयोग करके काम कर रहा है। निश्चित नहीं है कि यह क्यों जरूरी था, हालांकि, क्योंकि मेरा सभी डेटा तार था। आपकी मदद के लिए धन्यवाद! –

+0

क्या मुझे श्रोता के अंदर रेंडरर बदलने की अनुमति नहीं है? जब बटन दबाया जाता है तो मैं टेबल को दोबारा प्रारूपित करना चाहता हूं। –

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