के लिए जेटीबल अदृश्य में कॉलम कैसे बनाएं मैंने एक जीयूआई डिज़ाइन किया है जिसमें मैंने एक जेटीबल का उपयोग किया है जिससे मुझे 2 कॉलम अदृश्य बनाना है। मैं कैसे करूं ?स्विंग जावा
उत्तर
सेट मिनट, अधिकतम और "सामान्य" चौड़ाई 0 पर:
jTable.getColumn("ABC").setWidth(0);
jTable.getColumn("ABC").setMinWidth(0);
jTable.getColumn("ABC").setMaxWidth(0);
दूसरा दृष्टिकोण TableColumnModel
का विस्तार करने और (JTable के लिए) भ्रम पैदा करने के सभी तरीकों को ओवरराइड कि अपने मॉडल नहीं करता है 'करने के लिए है उन दो कॉलम नहीं है।
तो जब आप कॉलम छुपाते हैं, तो तालिका को कॉलम की संख्या के लिए पूछने पर आपको एक बार वापस लौटना होगा और जब यह कॉलम एक्स के लिए पूछता है, तो आपको कॉलम इंडेक्स में +1 जोड़ना पड़ सकता है (इसके आधार पर छिपे हुए कॉलम के बाएं या दाएं), आदि
अपने नए टेबल मॉडल को वास्तविक कॉलम मॉडल में सभी विधि कॉल (सही इंडेक्स आदि के साथ) आगे बढ़ने दें और जेटीबल में नए टेबल मॉडल का उपयोग करें।
आप मॉडल की एक उपवर्ग बना सकते हैं, और TableModel.getColumnCount
ओवरराइड इस प्रकार है:
int getColumnCount() {
return super.getColumnCount()-2;
}
अंतिम दो कॉलम तो JTable
में प्रदर्शित नहीं किया जाएगा।
लेकिन क्या मैं उनसे डेटा प्राप्त कर सकता हूं? –
आप केवल भ्रम पैदा कर रहे हैं कि कॉलम नहीं हैं, लेकिन अभी भी वहां हैं और इस प्रकार डेटा को अभी भी प्राप्त करने में सक्षम होना चाहिए – dharga
लेकिन मुझे उन्हें GUI से कैसे छिपाना चाहिए। –
TableColumnModel
से हटाएं।
TableColumnModel tcm = table.getColumnModel();
tcm.removeColumn(tcm.getColumn(...));
यदि आपको डेटा तक पहुंच की आवश्यकता है तो आप table.getModel().getValueAt(...)
का उपयोग करें।
एक और जटिल समाधान के लिए जो उपयोगकर्ता को कॉलम को छुपाने/दिखाने की अनुमति देता है क्योंकि वे Table Column Manager देखें।
यह करने का यह सही तरीका है - चौड़ाई को 0 पर सेट करना बोगस है। इस तरह आपके पास अभी भी आपके मॉडल में डेटा है; आप सिर्फ दृश्य का हिस्सा छुपा रहे हैं। – M1EK
उपरोक्त दृष्टिकोण के साथ भी डेटा मॉडल में अभी भी है, यही कारण है कि आप इसे ऊपर दिखाए गए अनुसार एक्सेस कर सकते हैं। एमवीसी कैसे काम करता है। हम जो भी कर रहे हैं वह दृश्य बदल रहा है। जब आप चौड़ाई को 0 पर सेट करते हैं, तो टैबबिंग आज़माएं, जब आप छुपा कॉलम फ़ोकस दबाते हैं तब तक गायब हो जाते हैं जब तक आप दोबारा टैब नहीं करते। यह उपयोगकर्ताओं को भ्रमित करेगा। – camickr
आपको बहुत बहुत धन्यवाद। इसने मुझे बहुत मदद की ......... – Geetanjali
मैंने दो संभावित समाधानों की कोशिश की जो दोनों काम करते हैं, लेकिन पहले समाधान के साथ कुछ समस्या मिली।
table.removeColumn(table.getColumnModel().getColumn(4));
या
table.getColumnModel().getColumn(4).setMinWidth(0);
table.getColumnModel().getColumn(4).setMaxWidth(0);
table.getColumnModel().getColumn(4).setWidth(0);
मेरी हाल ही में मामले में, मुझे 2 समाधान को प्राथमिकता दी क्योंकि मैं एक TableRowSorter गयी।
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
जब table.removeColumn(table.getColumnModel().getColumn(4))
का उपयोग कर, यह शारीरिक रूप से देखें/तालिका से स्तंभ निकाल देंगे ताकि आप table.getValueAt(row, 4)
उपयोग नहीं कर सकते हैं - यह रिटर्न ArrayIndexOutOfBounds
। हटाए गए कॉलम का मान प्राप्त करने का एकमात्र तरीका table.getModel().getValueAt(table.getSelectedRow(),4)
पर कॉल करना है। TableRowSorter के बाद से प्रकार केवल क्या मेज पर है, लेकिन नहीं DefaultTableModel वस्तु में डेटा, समस्या यह है कि जब आप रिकॉर्ड छँटाई के बाद मूल्य मिलता है - यह DefaultModelObject, जो पृथक नहीं किया जा रहा है से डेटा पुनः प्राप्त होगा ।
तो मैं इस्तेमाल किया 2 समाधान तो इस्तेमाल किया table.getValueAt(table.getSelectedRow(),4);
केवल मुद्दा मैं 2 दृष्टिकोण के साथ देखते हैं @camickr द्वारा उल्लेख किया गया था: "आप 0 करने के लिए चौड़ाई सेट करते हैं, टैब, जब आप छिपा मारा की कोशिश कॉलम फ़ोकस तब तक गायब हो जाता है जब तक आप दोबारा टैब न करें। इससे उपयोगकर्ताओं को भ्रमित कर दिया जाएगा। "
'table.getModel() का उपयोग करें। getValueAt (table.convertRowIndexToModel (पंक्ति), 4)। – xmedeko
मैंने उन सभी की कोशिश की है: वे मदद नहीं करते हैं। कॉलम के बिना एक नया टेबल मॉडल बनाना सबसे अच्छा तरीका है जिसे आप हटाना चाहते हैं। यह तुम कैसे करते है:
table = (DefaultTableModel) <table name>.getModel();
DefaultTableModel table1 = new DefaultTableModel();
Vector v = table.getDataVector();
Vector v1 = newvector(v,<column index you want to delete>);
Vector newvector(Vector v,int j){
Vector v1= new Vector();
try{
Vector v2;
Object[] o = v.toArray();
int i =0;
while(i<o.length){
v2 = (Vector) o[i];
v2.remove(j);
v1.add(v2);
i++;
}
}
catch(Exception e){
JOptionPane.showMessageDialog(null,"Error in newvector \n"+e);
}
return v1;
}
Vector getColumnIdentifiers(int i) {
Vector columnIdentifiers = new Vector();
int j=0;
while(j<i){
columnIdentifiers.add(("c"+(j+1)));
j++;
}
return columnIdentifiers;
}
table1.setDataVector(v1,getColumnIdentifiers((<column count>-1)));
<table name>.setModel(table1);
पहला दृश्य
table.removeColumn(table.getColumnModel().getColumn(4));
से इस स्तंभ को निकालने फिर मॉडल से डेटा पुनः प्राप्त।
table.getModel().getValueAt(table.getSelectedRow(),4);
एक बात ध्यान रखें कि जब डेटा पुन: प्राप्त है, यह मॉडल मेज से नहीं से पुनः प्राप्त किया जाना चाहिए है।
मॉडल से कैसे निकालें? – partho
मैं एक ही समस्या थी और की वजह से मैं TableColumnModel
removColumn();
उपयोग कर रहा हूँ मेरी मदद does'not तो मैं इस
table.getColumnModel().getColumn(0).setWidth(0);
table.getColumnModel().getColumn(0).setMinWidth(0);
table.getColumnModel().getColumn(0).setMaxWidth(0);
इस्तेमाल किया और मेरे लिए ठीक काम किया यह अभी भी एक स्तंभ 0 छिपाने के लिए और मैं मूल्य प्राप्त करने में सक्षम इससे
- 1. जावा स्विंग
- 2. जावा (स्विंग)
- 3. जावा स्विंग
- 4. जावा स्विंग
- 5. जावा स्विंग
- 6. जावा स्विंग
- 7. जावा स्विंग
- 8. जावा स्विंग
- 9. जावा स्विंग
- 10. जावा स्विंग
- 11. जावा स्विंग
- 12. दूषित जावा स्विंग विंडो
- 13. जावा स्विंग एप्लिकेशन फ्रेमवर्क
- 14. जावा स्विंग फ़ॉन्ट चयनकर्ता
- 15. जावा स्विंग प्रोग्राम संरचना
- 16. जावा स्विंग जेएफआरएएम लेआउट
- 17. जावा स्विंग फ़्लोलाउआउट संरेखण
- 18. जावा स्विंग जीयूआई
- 19. जावा स्विंग एक्शनमैप कुंजी
- 20. जावा का स्विंग थ्रेडिंग
- 21. जावा स्विंग पृष्ठभूमि छवि
- 22. जावा स्विंग ऐप
- 23. जावा स्विंग: Jtable ArrayIndexOutOfBoundsException
- 24. जावा स्विंग JTextField
- 25. जावा स्विंग डेस्कटॉप ऐप
- 26. जावा स्विंग बटन रंग
- 27. जावा स्विंग - ईडीटी
- 28. जावा स्विंग बॉक्स AloutmentX
- 29. जावा स्विंग - कैसे ActionListener
- 30. जावा स्विंग "बच्चों" विंडोज
नहीं, यह काम नहीं करता है। –
आपको न्यूनतम और अधिकतम चौड़ाई भी सेट करनी होगी। –
आदेश क्यों महत्वपूर्ण है, मैंने इसे पहले कोशिश की और मैंने उसी क्रम का उपयोग नहीं किया, इसलिए यह काम नहीं करता है, ओईसी मैंने उसी क्रम (चौड़ाई, न्यूनतम, अधिकतम) का उपयोग किया है, तो क्यों? –