JTable

2012-03-29 32 views
23

में उपयोगकर्ता संपादन अक्षम करें जब कोई JTable घटक बनाया जाता है, तो सेल संपादन डिफ़ॉल्ट रूप से सक्षम होता है। मैं उपयोगकर्ता को JTable की सामग्री को संपादित करने से कैसे रोक सकता हूं?JTable

JTable jTable = new JTable() { 
     private static final long serialVersionUID = 1L; 

     public boolean isCellEditable(int row, int column) {     
       return false;    
     }; 
    }; 

मूल रूप से हम यहाँ क्या कर रहे हैं isCellEditable अधिभावी और हमेशा इसे से झूठे लौट जाता है:

+2

देखें [* टेबल्स का उपयोग कैसे करें *] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html)। – trashgod

उत्तर

33

एक जेटीबल एक सारणीबल मॉडल ऑब्जेक्ट का उपयोग करता है। यह वह चीज है जिसे आप जेटीबल के निर्माता में पास करते हैं। के रूप में

public class MyTableModel extends AbstractTableModel { 

     public boolean isCellEditable(int row, int column){ 
      return false; 
     } 

} 

इस प्रकार आप अपनी खुद की AbstractTableModel लिख सकते हैं और उसके बाद के रूप में

JTable myTable = new JTable(new MyTableModel()); 
+0

मैं इस कोड को आजमाने की कोशिश कर रहा था ताकि उपयोगकर्ता सेल की सामग्री को संपादित करने में सक्षम हो सके, जो काम कर रहा है। हालांकि, यह सेल की सामग्री को बदलने के लिए एप्लिकेशन से भी बचता है, क्या उस विशेष परिदृश्य के लिए कोई कामकाज है? – clement

+3

जाहिर है, बस एक बूलियन गुजरने के लिए डिजाइनरों के लिए पर्याप्त नहीं था ... – pauluss86

39

आप एक JTable का उपयोग कर निम्न कोड बना सकते हैं। यह एक गैर संपादनबे JTabel बना देगा।

+0

यदि यह सब कुछ कर रहा है, तो मुझे अज्ञात वर्ग का उपयोग करने में कोई समस्या नहीं दिखाई दे रही है। – Chase

+3

यह बेहतर जवाब होना चाहिए। मुझे यहां एनन कक्षा का उपयोग करने में कुछ भी गलत नहीं लगता है। इसके अलावा उपयोगकर्ता अन्य स्थान पर अलग-अलग 'टेबल मॉडल' का उपयोग कर सकता है। वोट दें! – instinct

+2

+1 @instict क्योंकि यह तालिका मॉडल को प्रभावित नहीं करता है यह मेरी राय में एक बेहतर जवाब है। यह भी सवाल है: क्या serialVersionUID वास्तव में आवश्यक है? – Paul

4

हाय अपने JTable प्रारंभ मैं जावा पर बहुत कुछ काम कर रहा हूँ तो मैं तुम मेरी रास्ता देने जा रहा हूँ: रहे हैं नेटबीन के तहत पहली बार दो संभावनाएं। इस तरह कोड को अनुकूलित और इसे बनाने के लिए जाएँ:

JTArticleJPAddArrticle = new javax.swing.JTable(); 

JTArticleJPAddArrticle.setBackground(new java.awt.Color(204, 204, 255)); 

JTArticleJPAddArrticle.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] { 

}, 
new String [] { 
    "Reference","Libellé","Marque","Prix d'achat","Prix de vente","Quantité","Total","Etat" 
} 
){ 
public boolean isCellEditable(int rowIndex, int columnIndex) { 
    return false; 
} 
}); 



jScrollPane8.setViewportView(JTArticleJPAddArrticle); 

मेरे अन्य तरीके से यह तालिका मॉडल का एक उदाहरण बनाने के लिए है करने के लिए है। यह दूसरा तरीका है:

model=new DefaultTableModel(head, 0){ 

    @Override 
    public boolean isCellEditable(int i, int i1) { 
     return false; //To change body of generated methods, choose Tools | Templates. 
    } 

    }; 
jtable.setmodel(model); 

इसका आनंद लें मेरे लिए अच्छा काम कर रहा है। मैं बस इतना करना चाहता हूं कि आप लोगों की मदद करें क्योंकि मुझे बहुत पहले मदद मिली थी।

+0

ये दोनों एक ही तरीके से हैं।दूसरे कोड स्निपेट में केवल कम अप्रासंगिक कोड है, जो इसे उत्तर के रूप में बेहतर बनाता है। –

+0

@ मिकाहस्टर्स निष्पादन प्रक्रिया में पहला सबसे बेहतर है क्योंकि कक्षा आसानी से संकलित की जाएगी, दूसरा एक ओवरराइड है जिसमें थोड़ा और समय लगेगा, लेकिन डेवलपर के लिए डिज़ाइन व्यू द्वारा दूसरा दूसरा आसान आसान रखरखाव कोड है; –

10
myTable.setDefaultEditor(Object.class, null); 
+2

शायद आप इस काम को समझा सकते हैं और दोषों की गणना कर सकते हैं? ऐसा लगता है कि अर्थशास्त्र पिछले उत्तरों की तुलना में अलग हैं-यानी। आप एक शून्य संपादक सेट कर रहे हैं। शायद यह धीमा है क्योंकि तालिका संपादन योग्य है या नहीं, यह लंबे कोड पथ का पालन करने की आवश्यकता है? –

+1

यह वह सरल उत्तर है जिसे मैं ढूंढ रहा था। शायद सर्वश्रेष्ठ प्रदर्शन के रूप में नहीं हो सकता है, लेकिन इसकी सादगी इसके लायक है। – Cristian

2

आप बस tryed है:

JTable table = new JTable(); 
table.setEnabled(false); 

बारे JComponent.setEnabled(boolean) यह Sayes:

सेट किया जाए या नहीं इस घटक सक्षम है। सक्षम एक घटक उपयोगकर्ता इनपुट का जवाब दे सकता है, जबकि एक घटक जो सक्षम नहीं है उपयोगकर्ता इनपुट का जवाब नहीं दे सकता है। कुछ घटक उपयोगकर्ता को प्रतिक्रिया प्रदान करने के लिए अक्षम होने पर उनके दृश्य प्रतिनिधित्व को बदल सकते हैं कि वे इनपुट नहीं ले सकते हैं।

जब जेटीबल की बात आती है तो यह किसी भी दृश्य प्रतिक्रिया को बिल्कुल प्रतीत नहीं होता है। कॉलम हेडर पर क्लिक करने में सक्षम होने के पर्क के साथ। और मेरे कार्यान्वयन में आवेदन अभी भी कोशिकाओं की सामग्री को बदल सकता है।

+0

ओह। बस देखा कि उपयोगकर्ता सिद्धू यहां एक ही समाधान के साथ आए थे: http://stackoverflow.com/questions/1990817/how-to-make-a-jtable-non-editable?noredirect=1&lq=1। अगर मुझे इसे हटा देना चाहिए या छोड़ना है, क्योंकि मुझे नहीं पता कि कौन सा प्रश्न डुप्लिकेट के रूप में हटाया जा सकता है। क्षमा करें, यहां एक नोब: o – brat

+0

समस्या यह है कि उपयोगकर्ता यह नहीं देख सकता कि कोई क्लिक या सेल उसे क्लिक करने के बाद भी चुना गया है या नहीं। मैंने 'setDefaultEditor()' का उपयोग इस से बेहतर होने के लिए पाया क्योंकि यह किसी भी पंक्ति या सेल का चयन करते समय दृश्य प्रतिक्रिया प्रदान करता है। – anotherGatsby

0
 tm = new javax.swing.table.DefaultTableModel() 
       { 
         public Class<?> getColumnClass(int column) 
         { 
         switch(column) 
         { 
         case 0: 
          return String.class; 
         case 1: 
          return String.class; 
         case 2: 
          return String.class; 
         case 3: 
          return String.class; 
         case 4: 
          return String.class; 
         case 5: 
           return String.class; 
          case 6: 
           return String.class; 
          case 7: 
           return String.class; 
          case 8: 
           return String.class; 
          case 9: 
            return String.class; 
           case 10: 
            return String.class; 
           case 11: 
            return Boolean.class; 

          default: 
          return String.class; 
         } 
         } 

         @Override 
         public boolean isCellEditable(int row, int column) { 
         /* Set the 11th column as editable and rest non- 
           editable */ 
          if(column==11){ 
           return true; 
          }else{ 
//all other columns to false 
         return false; 
          } 
         } 
        }; 
    table = new javax.swing.JTable(tm); 
+0

कृपया [संपादित करें] (https://stackoverflow.com/posts/49110309/edit) यह बताने के लिए कि आपका कोड कोड का यह प्रश्न प्रश्न का उत्तर क्यों देता है। –

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