दिलचस्प पोस्ट
उद्देश्य सी क्लास से कॉल स्विफ्ट फ़ंक्शन आप स्ट्रिंगस्ट्रीम चर कैसे साफ़ करते हैं? उबंटू 13.10 को अपग्रेड करने के बाद ग्रहण मेनू दिखाई नहीं देता ओएस एक्स पर MySQL my.cnf स्थान? एक शब्दकोश में नई कुंजी जोड़ें? एक डॉकर कंटेनर चलाने पर सेवा को स्वचालित रूप से कैसे प्रारंभ करें? निर्माता चेतावनी में इसे लेक बीएचएम छवि को एक आलेखक के लिए निर्देशों का सेट करने के लिए परिवर्तित करना है? सी ++ स्टैंडर्ड लाइब्रेरी: सीओएटी, सीर, सीन और एंडल के लिए आवरण लिखने के लिए कैसे? जब एफ का उपयोग करें: viewAction / preRenderView बनाम PostConstruct? सी # के रूप में टुपले (या एरेज़) शब्दकोश कुंजी के रूप में सरणी के माध्यम से जावास्क्रिप्ट के मूल `indexOf` की तुलना में इतनी तेज़ क्यों हो रहा है? Google डॉक्स और Google ड्राइव में Google Apps MIME प्रकार क्या हैं? सी ++ टेम्पलेट क्लास के लिए एक पैरामीटर के रूप में स्ट्रिंग को पास करना प्रिंट करने के तरीके (cout का उपयोग करके) किस प्रकार एक संख्या को स्मृति में संग्रहीत किया जाता है?

पंक्ति में 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(); } } 

वेब के समाधान से एकत्रित समाधान "पंक्ति में 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 का उपयोग करने का सुझाव देता हूं, फिर आपको डुप्लिकेट या मिस्ड कॉलम / पंक्ति को हल करने की आवश्यकता नहीं होगी