2012-08-28 12 views
5

मैं एक कस्टम सेल रेंडरर का उपयोग कर रहा हूं जो TableCellRenderer लागू करता है और प्रत्येक पंक्ति के लिए JTextArea (JLabel के बजाए) प्रदर्शित करता है। मैं मूल रूप से getTableCellRendererComponent (...) विधि को ओवरराइड कर रहा हूं जो प्रति पंक्ति कुछ अतिरिक्त गणना करता है। ये गणना प्रति तालिका अद्यतन के ठीक बाद एक बार किया जाना है। चूंकि GetTableCellRendererComponent विधि को हर माउस चाल के साथ बुलाया जा रहा है, अंतराल होता है। तो मैंने सोचा कि मुझे getTableCellRendererComponent को अंतराल से बचने के लिए बुलाए जाने से रोकना चाहिए।getTableCellRendererComponent कॉल की संख्या कम करें

बातें:

1) मेरी मेज केवल 1 स्तंभ है और कोई शीर्ष लेख है।

2) मेरा डेटा स्थैतिक है और एक कस्टम टेबलमॉडल क्लास में getValueAt (int पंक्ति, int कॉलम) विधि द्वारा एक ArrayList से पढ़ा जाता है, सार सारणी मॉडल को कार्यान्वित करता है।

3) मुझे माउस गति घटनाओं को देखने की आवश्यकता नहीं है।

4) मुझे अधिक डेटा की उम्मीद नहीं है, इसलिए मैं पूरी तालिका को एक बार में प्रदर्शित करना चाहता हूं या इसे पूरी तरह से कैश करना चाहता हूं।

5) अधिकांश अंतराल GetTableCellRendererComponent से लौटने पर प्रत्येक बार टेक्स्ट सेट करके होता है, क्योंकि कुछ पंक्तियां राइट-टू-बाएं वर्णों का उपयोग कर रही हैं और आरटीएल पाठ को प्रस्तुत करने के लिए अतिरिक्त समय की आवश्यकता होती है।

+1

बस @ रोबिन के उत्तर पर जोर देने के लिए: कभी भी donanyRendererComponent में _any_ गणना नहीं करें। कॉल की आवृत्ति उच्च और पूरी तरह से आपके नियंत्रण से बाहर है। – kleopatra

+0

@ क्लोपेट्रा के पास मिला। लेकिन फिर मैं आंतरिक परिचालनों को कैसे नियंत्रित करूं? GetTextRendererComponent विधि के अंदर setText और setFont विधियों की तरह मैं (मेरे JTextArea सेल के लिए) का उपयोग करता हूं। –

+0

_renderer_ को कॉन्फ़िगर करना ठीक है .. लगता है जैसे मैं "गणना" से वास्तव में क्या मतलब समझता हूं। एक एसएससीईई के लिए समय (या कम से कम रेंडरर का कोड :-) – kleopatra

उत्तर

7

getTableCellRendererComponent कॉल की संख्या को सीमित करने की कोशिश न करें। इसके बजाय, गणना के परिणामों को कैश करके बेहतर प्रस्तुतकर्ता के कार्यान्वयन को बेहतर बनाएं।

आप आसानी से टेबलमोडल में श्रोता जोड़ सकते हैं ताकि आपका रेंडरर मॉडल को अपडेट होने पर जानता हो। केवल तभी यह चिह्नित होना चाहिए कि संग्रहीत गणना परिणाम अमान्य हैं, और उन्हें अगले getTableCellRendererComponent कॉल पर पुन: गणना करें।

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