किसी तालिका में एक टेबलरॉर्टर जोड़ने के बाद और इसके संबंधित मॉडल को विशेष रूप से फ़ायरटेबलबैलेरोइन्सर्टेड कारण अपवादों पर जोड़ा जाता है। यह परीक्षण से स्पष्ट है कि GetRowCount() मॉडल रेंज के पीछे एक मूल्य लौटा रहा है। हालांकि यह मुझे समझ में नहीं आता है कि सॉर्टर या फ़िल्टर जोड़े जाने के बाद तालिका में मूल्य जोड़ने के लिए कैसे जारी रखें?मॉडल कारणों में मान जोड़ने वाले TableRowSorter जोड़ने के बाद java.lang.IndexOutOfBoundsException: अमान्य रेंज
एक उदाहरण के रूप में, मैं मेज पर कुछ भी जोड़ने से पहले पंक्ति फ़िल्टर सेट तो अपने मॉडल में निम्नलिखित कॉल के साथ तालिका में एक मूल्य जोड़ने:
this.addRow(row, createRow(trans,row));
this.fireTableRowsInserted(this.getRowCount(), this.getRowCount());
rowcount आकार 1 और अपवाद की है फेंक दिया जाता है:
java.lang.IndexOutOfBoundsException: Invalid range
at javax.swing.DefaultRowSorter.checkAgainstModel(Unknown Source)
at javax.swing.DefaultRowSorter.rowsInserted(Unknown Source)
at com.gui.model
अगर मैं पहले सॉर्टर सब कुछ जोड़ने के बिना एक ही चरण ठीक है। मैं मान लिया है कि संभवतः मैं मॉडल है कि सॉर्टर परिवर्तन किए हों और कोशिश की सूचना देने के लिए की जरूरत है निम्नलिखित है लेकिन अभी भी एक अपवाद देता है:
this.addRow(row, createRow(trans,row));
this.fireTableStructureChanged()
this.fireTableRowsInserted(this.getRowCount(), this.getRowCount());
मैं भी मॉडल है कि एक मूल्य जोड़ दिया गया है अंदर सॉर्टर सूचित करने के लिए करने की कोशिश की नीचे की तरह आग कॉल करने से पहले मॉडल के लिए, लेकिन यह रूप में अच्छी तरह विफल रहता है:
this.addRow(row, createRow(trans,row));
if(sorter.getRowFilter() != null){
//if a sorter exists we are in add notify sorter
sorter.rowsInserted(getRowCount(), getRowCount());
}
this.fireTableRowsInserted(this.getRowCount(), this.getRowCount());
अन्त में, मैं कठिन FireTableRowsInsterted (0,0) कोडित और यह किसी भी अपवाद नहीं है। लेकिन टेबल में कुछ भी जोड़ा नहीं जाता है? इसलिए, मुझे पता है कि यह निश्चित रूप से आउटऑफबाउंड मुद्दे का कुछ प्रकार है। मैंने पूरे देखा है और उत्तर नहीं ढूंढ रहा है। अगर किसी को यह पता है कि यह काम करने का अनुमान है तो यह बहुत उपयोगी होगा। ऐसा लग रहा है कि आप अपने मॉडल में जाँच करता है, तो
public void update(Observable o, Object evt) {
if (evt instanceof ObservableEvent<?>) {
ObservableEvent<?> event = (ObservableEvent<?>) evt;
if (event.getElement() instanceof HttpTransaction) {
HttpTransaction trans = (HttpTransaction) event.getElement();
// handle adding of an element
if (event.getAction() == PUT) {
if (includeTransaction(trans)) {
// handle request elements
if (trans.getRequest() != null && idMap.get(trans.getID()) == null) {
idMap.put(trans.getID(), count++);
// transactionManager.save(trans);
int row = idMap.get(trans.getID());
this.addRow(row, createRow(trans,row));
if(sorter.getRowFilter() != null){
sorter.rowsInserted(getRowCount(), getRowCount());
}
this.fireTableRowsInserted(this.getRowCount(), this.getRowCount());
}
'this.fireTableRowsInserted (this.getRowCount(), this.getRowCount());' - अच्छा खोलना :-) – Whired
+1 @Whired है - अपने स्वयं के उत्तर में @ पॉल की टिप्पणी में टिप्पणी देखें: आपके भीतर एक ही त्रुटि। बीटीडब्लू, कभी मॉडल के _outside_ से एक मॉडल घटना आग नहीं। रुचि रखने वाले पक्षों को सूचित करने के लिए यह मॉडल की अनन्य ज़िम्मेदारी है ... – kleopatra