2009-07-13 20 views
14

मैं एक जेटीबल से कुछ पंक्तियों को हटाना चाहता हूं। मैं यह कैसे कर सकता हूं?JTable से एक पंक्ति को कैसे निकालें?

+6

टिप है: अगर तुम समझा क्या आप पहले से ही की कोशिश की है, और क्या ऑनलाइन ट्यूटोरियल आप पढ़ा है, लोगों को और अधिक मदद करने के लिए इच्छुक हो जाएगा। या कुछ नमूना कोड दें और हमें बताएं कि कौन सा काम काम नहीं करता है। यदि आपने पहले से नहीं किया है तो इसे पढ़ें: सहायता के लिए http://java.sun.com/docs/books/tutorial/uiswing/components/table.html –

उत्तर

3

एक जेटीबल आमतौर पर एक एमवीसी कार्यान्वयन का दृश्य भाग बनाता है। आप अपने मॉडल से पंक्तियों को हटाना चाहते हैं। जेटीबल, जो इन परिवर्तनों के लिए सुनना चाहिए, इस हटाने को प्रतिबिंबित करने के लिए अद्यतन होगा। इसलिए आपको JTable पर विधि के रूप में RemoveRow() या समान नहीं मिलेगा।

+0

thanx, लेकिन मैं जानना चाहता हूं कि पंक्तियों को कैसे निकालें टेबल मॉडल, मुझे कोई विधि नहीं मिल रही है। –

+1

इस तरह की चीजों के माध्यम से पढ़ लें: http://java.sun.com/docs/books/tutorial/uiswing/components/table.html – dave

+0

संक्षेप में, आप एक कस्टम टेबल मॉडल बनाते हैं। जेटीबल पंक्तियों को स्टोर नहीं करता है, यह एक टेबल मॉडल में प्रतिनिधि करता है। यदि आप चाहें तो आप सारणीटेबल मॉडल से उपclass कर सकते हैं। हर बार जब आप पंक्तियां हटाते हैं तो FireTableRowsDeleted() को कॉल करें। मदद के लिए – dave

3

एक साधारण मॉडल है कि आप उपयोग कर सकते हैं के लिए DefaultTableModel पर देखो:

http://java.sun.com/javase/6/docs/api/javax/swing/table/DefaultTableModel.html

यह AbstractTableModel फैली हुई है, लेकिन बुनियादी उद्देश्यों के लिए पर्याप्त होना चाहिए। आप हमेशा सारणीटेबल मॉडल का विस्तार कर सकते हैं और अपना खुद का बना सकते हैं। सुनिश्चित करें कि आप इसे JTable पर भी सेट करें।

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#data

33

एक JTable से एक पंक्ति को निकालने के लिए, आप को दूर करने की जरूरत है:

http://java.sun.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html

तालिका मॉडल के साथ JTable का उपयोग कर के बारे में अधिक जानकारी के लिए बुनियादी सूर्य ट्यूटोरियल पर देखो अंतर्निहित TableModel से लक्ष्य पंक्ति। हैं, उदाहरण के लिए, अपने TableModel DefaultTableModel का एक उदाहरण है, तो आप निम्न करके एक पंक्ति निकाल सकते हैं:

((DefaultTableModel)myJTable.getModel()).removeRow(rowToRemove); 
+0

thanx, लेकिन मैंने इस विधि का उपयोग किया है और यह काम नहीं कर रहा है। असल में मेरा जेटेबल स्थानटेबल मॉडल (स्वयं बनाया गया) का उपयोग कर सार सारणी मॉडल का विस्तार कर रहा है, इसलिए जब मैं removeRow (i) विधि का उपयोग कर रहा हूं, तो यह त्रुटि को हटा सकता है "हटाने का प्रयास करें()" .. मैं किस विकल्प का उपयोग करूंगा .. –

+4

ठीक है अगर आप अपना खुद का कस्टम टेबल मॉडल बनाया है, तो आप अपनी खुद की "removeRow" विधि बनाने के लिए ज़िम्मेदार हैं। यह कैसे किया जाता है यह देखने के लिए DefaultTableModel के स्रोत कोड को देखें। EasyTableModel का उपयोग करना आसान समाधान है। आपको लगता है कि आपको कस्टम टेबल मॉडल बनाने की आवश्यकता क्यों है? जब तक आप मॉडल का उपयोग करने की मूल बातें समझ नहीं लेते हैं, तब तक दिए गए डिफ़ॉल्ट का उपयोग करें। – camickr

4

एक JTable में फ़िल्टर लागू करने का सही तरीका RowFilter इंटरफ़ेस एक TableRowSorter को जोड़ा गया के माध्यम से है। इस इंटरफ़ेस का उपयोग करके, मॉडल के दृश्य को अंतर्निहित मॉडल को बदले बिना बदला जा सकता है। यह रणनीति मॉडल-व्यू-कंट्रोलर प्रतिमान को बरकरार रखती है, जबकि मॉडल से छिपी हुई पंक्तियों को हटाने से आप चिंताओं को अलग करने में भ्रमित होकर प्रतिमान को तोड़ देते हैं।

8

यदि आपको एक साधारण कामकाजी समाधान की आवश्यकता है, तो DefaultTableModel का उपयोग करने का प्रयास करें।

यदि आपने अपना खुद का टेबल मॉडल बनाया है, जो सारटेबल मॉडेल को बढ़ाता है, तो आपको removeRow() विधि को भी लागू करना चाहिए। सटीक कार्यान्वयन अंतर्निहित संरचना पर निर्भर करता है, जिसे आपने डेटा स्टोर करने के लिए उपयोग किया है।

उदाहरण के लिए

, यदि आप वेक्टर का इस्तेमाल किया है, तो यह कुछ इस तरह हो सकता है:

public class SimpleTableModel extends AbstractTableModel { 
    private Vector<String> columnNames = new Vector<String>(); 
    // Each value in the vector is a row; String[] - row data; 
    private Vector<String[]> data = new Vector<String[]>(); 

    ... 

    public String getValueAt(int row, int col) { 
     return data.get(row)[col]; 
    } 

    ... 

    public void removeRow(int row) { 
     data.removeElementAt(row); 
    } 
} 

आप का इस्तेमाल किया है, तो सूची है, तो यह बहुत ज्यादा एक जैसे होगा:

// Each item in the list is a row; String[] - row data; 
List<String[]> arr = new ArrayList<String[]>(); 

public void removeRow(int row) { 
    data.remove(row); 
} 

HashMap :

//Integer - row number; String[] - row data; 
HashMap<Integer, String[]> data = new HashMap<Integer, String[]>(); 

public void removeRow(Integer row) { 
    data.remove(row); 
} 

और तुम इस एक

तरह सरणियों उपयोग कर रहे हैं
String[][] data = { { "a", "b" }, { "c", "d" } }; 

तो आप भाग्य से बाहर हैं, क्योंकि गतिशील रूप से सरणी से तत्वों को हटाने का कोई तरीका नहीं है। आप अलग-अलग झंडे को संग्रहीत करके सरणी का उपयोग करने की कोशिश कर सकते हैं जो बताते हैं कि कौन सी पंक्तियां हटा दी गई हैं और जो नहीं हैं, या कुछ अन्य विचलित तरीके से, लेकिन मैं इसके खिलाफ सलाह दूंगा ... इससे अनावश्यक जटिलता लागू होगी, और वास्तव में केवल होगा एक और बनाकर एक समस्या को हल करना। here को समाप्त करने के लिए यह एक निश्चित-अग्नि तरीका है। इसके बजाय अपने टेबल डेटा को स्टोर करने के उपर्युक्त तरीकों में से एक आज़माएं।

यह कैसे काम करता की बेहतर समझ है, और क्या अपना स्वयं का मॉडल ठीक से काम करने के लिए क्या करने के लिए के लिए, मैं आप Java Tutorial, DefaultTableModel API का उल्लेख करने के दृढ़ता से की सलाह और यह source code है।

3

mmm बहुत सरल लोग

for(int i = model.getRowCount() - 1; i >= 0; i--) 
{ 
    model.removeRow(i); 
} 
+1

सुबह में लाखों सूचनाओं की तरह कुछ नहीं ;-) – greenoldman

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