ऐसा करने का सबसे आसान तरीका अपने टेबल मॉडल के लिए डेकोरेटर/फ़िल्टर मॉडल लागू करना है।
डेकोरेटर TableModel को लागू करेगा, लेकिन आप जिन पंक्तियों को छिपाना चाहते हैं, उसके आधार पर getValueAt(row,col) में दिए गए पैरामीटर को बदल देगा।
उदाहरण के लिये
सार्वजनिक वर्ग RowFilterModel TableModel को लागू करता है {... निजी बूलियन[] isRowHidden; निजी पूर्णांक numVisibleRows; सार्वजनिक RowFilterModel(TableModel realModel) { this.realModel = realModel; numVisibleRows = realModel.getRowCount(); isRowHidden = नया बूलियन[numVisibleRows]; } सार्वजनिक int getRowCount() {वापसी numVisibleRows; } सार्वजनिक int getColumnCount() { return realModel.getColumnCount(); } सार्वजनिक शून्य setRowVisible(int पंक्ति, बूलियन स्थिति) { isRowHidden[row] = !state; यदि (राज्य) numVisibleRows++; अन्यथा numVisibleRows--; } सार्वजनिक ऑब्जेक्ट getValueAt(int row, int col) {// return row-th नॉन-हिडन // ऐसा करने के लिए संभवतः अधिक कुशल तरीके हैं... for(int realRow=0; true; realRow++) { if (! isRowHidden[realRow]) { if (row==0) { return realModel.getValueAt(count,col); } पंक्ति--; } } } }
इस काम को करने के लिए स्पष्ट रूप से और भी बहुत कुछ करना बाकी है (और उपरोक्त कोड में कुछ समस्याएं हो सकती हैं), लेकिन इससे मूल विचार मिलना चाहिए। विशेष रूप से, आपको वास्तविक तालिका में परिवर्तन होने पर उचित रूप से रिपोर्ट करने के लिए उपरोक्त तालिका मॉडल के लिए ईवेंट हैंडलिंग सेट अप करने की आवश्यकता है। यदि वास्तविक तालिका बदलती है तो आपको वास्तविक मॉडल में परिवर्तनों पर भी नजर रखनी होगी और छिपी हुई पंक्ति सरणी को समायोजित करना होगा।
फिर आप इसे इस प्रकार उपयोग कर सकते हैं:
जेटेबल टी = ...; RowFilterModel फ़िल्टर = नया RowFilterModel(t.getModel()); t.setModel(फ़िल्टर); ... फ़िल्टर.सेटरोविज़िबल(42, सत्य);
ध्यान दें कि मैंने "isRowHidden" का उपयोग करने के लिए अंदर के तर्क को उलट दिया है - यह इस तथ्य का लाभ उठाता है कि जब हम सरणी बनाते हैं, तो इसके मान गलत होंगे, इसलिए डिफ़ॉल्ट रूप से, सभी पंक्तियाँ दिखाई देती हैं। यदि हमने इसे "isRowVisible" कहा होता, तो हमें सरणी के सभी तत्वों को सत्य पर सेट करने की आवश्यकता होती।
मैं आपको यहां प्रयुक्त मॉडल फ़िल्टरिंग अवधारणा पर अधिक जानकारी के लिए आईबीएम के विज़ुअलएज डेवलपर डोमेन पर मेरा लेख "उन्नत मॉडल-व्यू-नियंत्रक तकनीक" पढ़ने की सलाह दूंगा। http://www7.software.ibm.com/vad.nsf/Data/Document2329 देखें।







