दिलचस्प पोस्ट
Node.js – मंच अज्ञातवादी तरीके से घर निर्देशिका खोजें खड़ी स्क्रॉल पर आधारित jquery के साथ कक्षा जोड़ें / निकालें? कई सेकंड के बाद एक संदेश बॉक्स को बंद करें सीरियलाइज़ और बूस्ट का उपयोग कर डेटा संरचना भेजें? क्यों InetAddress.isReachable झूठी वापसी करता है, जब मैं आईपी पते पिंग कर सकता हूँ? ऐरे सूची से डुप्लिकेट निकालें स्थैतिक क्षेत्रों को विरासत में मिला है? सीएसएस एक्सेस करें: "बाद में" jQuery के साथ चयनकर्ता एनाकोंडा के दुभाषिया के साथ मैं कैसे सेटअप करूंगा? नेस्टेड टुकड़ों से मूल टुकड़े तक डेटा भेजना सीएसएस का उपयोग कर रेडियो बटन का आकार कैसे बदल सकता है? अजगर: urllib2 कैसे urlopen अनुरोध के साथ कुकी भेजने के लिए जावास्क्रिप्ट में URL से JSON कैसे प्राप्त करें? mod_rewrite: यूआरएल से क्वेरी स्ट्रिंग को हटा दें? मैं सी # में एक्सएमएल फाइल को पढ़ और पार्स कैसे कर सकता हूं?

पंक्ति में JTable डुप्लिकेट मान

मेरे पास एक कस्टम DataModel (नीचे चिपकाया गया) के साथ DataModel और जब मैं populate() विधि को कॉल करता हूं, तो यह तालिका को डुप्लिकेट डेटा के साथ पॉप्युलेट करने के लिए प्रतीत होता है- प्रत्येक पंक्ति एक ही मान से बार-बार भर जाती है। हालांकि, करीब निरीक्षण पर (केवल 'प्रिंट' () 'डाटा' फ़ील्ड लिखकर), डेटा मॉडल गलती नहीं है – यह सही डेटा रखता है, मुझे उम्मीद की गई प्रारूप में। क्या देता है?

 import java.util.ArrayList; import javax.swing.table.AbstractTableModel; @SuppressWarnings("serial") // we don't expect this app to ever use serialized classes. EVER. public class CollectionDataModel extends AbstractTableModel { private ArrayList<ArrayList<String>> data; public CollectionDataModel() { data = new ArrayList<ArrayList<String>>(); } @Override public int getColumnCount() { if(data.isEmpty()) return 0; return data.get(0).size(); } @Override public int getRowCount() { return data.size(); } @Override public Object getValueAt(int rowIndex, int columnIndex) { if(rowIndex > getRowCount()) return null; if(columnIndex > getColumnCount()) return null; return data.get(rowIndex).get(columnIndex); } public void populate(Collection c) { data.clear(); for(Item i : c.getItems()) { ArrayList<String> row = new ArrayList<String>(); for(Property p : i.getProperties().values()) { row.add(p.toString()); } data.add(row); } fireTableDataChanged(); } } 

Solutions Collecting From Web of "पंक्ति में JTable डुप्लिकेट मान"

यह एक पूर्ण उदाहरण है जो सहायक साबित हो सकता है जैसे नमूना Map असमाप्त नहीं है, मैं आपको @ एमकोबेल के उदाहरण के लिए संदर्भ देता हूं कि कैसे isCellEditable() ओवरराइड isCellEditable() और setValueAt()

 import java.awt.EventQueue; import java.awt.GridLayout; import java.util.Map; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; /** @see https://stackoverflow.com/questions/9132987 */ public class EnvTableTest extends JPanel { public EnvTableTest() { this.setLayout(new GridLayout()); this.add(new JScrollPane(new JTable(new EnvDataModel()))); } private static class EnvDataModel extends AbstractTableModel { private Map<String, String> data = System.getenv(); private String[] keys; public EnvDataModel() { keys = data.keySet().toArray(new String[data.size()]); } @Override public String getColumnName(int col) { if (col == 0) { return "Key"; } else { return "Value"; } } @Override public int getColumnCount() { return 2; } @Override public int getRowCount() { return data.size(); } @Override public Object getValueAt(int row, int col) { if (col == 0) { return keys[row]; } else { return data.get(keys[row]); } } } private void display() { JFrame f = new JFrame("EnvTableTest"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(this); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new EnvTableTest().display(); } }); } } 

आप अधिक परमाणुओं को पॉप्युलेट करने के परिवर्तन करने का प्रयास कर सकते हैं

 public void populate(Collection c) { ArrayList<ArrayList<String>> data2 = new ArrayList<ArrayList<String>>(); for(Item i : c.getItems()) { ArrayList<String> row = new ArrayList<String>(); for(Property p : i.getProperties().values()) { row.add(p.toString()); } data2.add(row); } data = data2; fireTableDataChanged(); } 

मैं अनुमान लगाता हूं कि पहले populate कॉल समाप्त होने से पहले populate को फिर से बुलाया जाता है। और संभवतः c की पुनरावृत्ति के दौरान बदल दिया है।

1) आपका टेबलमोडल पूर्ण नहीं है, मुझे जेटेबल JTable's जीवन_साइकिल के लिए बहुत सारे या आवश्यक तरीकों की याद आती है, जो टेबलहेडर आदि से शुरू होता है।

2) चूंकि हैशमैप के आधार पर बहुत से अब्सटेक्टेबल मॉडल्स हैं, मैं एआरएआई प्रकार को सीधे एपीआई में लागू करने का सुझाव देता हूं

 Vector<Vector<Object or String>> data; String[][] or Object[][] 

के बजाय

 ArrayList<ArrayList<String>> data; 

सरल स्पष्टीकरण यह है कि XxxList returs स्तंभ और वेक्टर या स्ट्रिंग [] पंक्ति देता है

3) मैं DefaultTableModel का उपयोग करने का सुझाव देता हूं, फिर आपको डुप्लिकेट या मिस्ड कॉलम / पंक्ति को हल करने की आवश्यकता नहीं होगी