2010-05-25 10 views
8

प्रस्तावना: मैं जावा के साथ भयानक हूं, और जावा यूई घटकों के साथ बदतर हूं।जेटीबल कॉलम को चेकबॉक्स कैसे बनाएं?

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

वर्तमान में मैं एक कस्टम कीजिए हैं:

public class GraphButtonCellRenderer extends JCheckBox implements TableCellRenderer { 
public GraphButtonCellRenderer() { 
} 
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
    if(isSelected) 
     setSelected(true); 
    else 
     setSelected(false); 
    setMargin(new Insets(0, 16, 0, 0)); 
    setIconTextGap(0); 

    setBackground(new Color(255,255,255,0)); 
    return this; 
}} 

जो वर्तमान में टिक बॉक्स ड्राइंग हैंडल, लेकिन केवल टिक्स और बॉक्स unticks अगर उस पंक्ति का चयन किया गया। लेकिन मुझे नहीं पता कि घटनाओं को कैसे संभालना है। वास्तव में जो मैं पूछ रहा हूं वह संभवतः एक जेटीबल को चेकबॉक्स को कैसे जोड़ना है, इस पर एक अच्छा ट्यूटोरियल का एक लिंक है। किसी भी सहायता बहुत सराहना कर रहा है :)

उत्तर

23

अपनी खुद की टेबल रेंडरर बनाने की कोई आवश्यकता नहीं है। Here's a simpler example। बस एक कस्टम तालिका मॉडल बना सकते हैं और किसी दिए गए स्तंभ के लिए के लिए वर्ग बूलियन वापसी:

public Class getColumnClass(int column) 

आप स्तंभ संपादन योग्य होना चाहते हैं,

public boolean isCellEditable(int row, int column) 

JTable के लिए प्रतिपादन का ख्याल रखता है के लिए सच वापसी आप।

Another example is here.

+0

+1 अच्छा बिंदु दे दूंगा; सरल पर्याप्त हो सकता है। ट्यूटोरियल विशिष्ट वर्गों के लिए कई डिफ़ॉल्ट प्रस्तुतकर्ताओं का वर्णन करता है। – trashgod

+0

स्वीकृत। लिंक के लिए बहुत बहुत धन्यवाद, मेरे लिए मेरे वर्तमान प्रोजेक्ट – theraven

4

यहाँ एक सरल बल्कि एक TableCellRenderer और TableCellEditor का उपयोग कर example विस्तृत है। यह भी देखें, Concepts: Editors and Renderers

परिशिष्ट: @Jay Askren का बिंदु अच्छी तरह से लिया जाता है। ट्यूटोरियल में वर्णित Boolean.class के लिए डिफ़ॉल्ट रेंडरर, आपको बस इतना ही चाहिए।

+0

धन्यवाद। मैं उस विशेष उदाहरण में नहीं आया था। इतनी सारी चीज़ें चल रही हैं ... मैं इसे एक क्रैक – theraven

3

सबसे आसान समाधान DefaultTableModel का उपयोग करें और मूल्यों के रूप में बूलियन वस्तु का प्रयोग है।

+0

हाँ के साथ पालन/एकीकृत करने के लिए यह काफी आसान है, यह सच है @ पीटर, लेकिन क्या हम उस चेकबॉक्स में कुछ मूल्य (आईडी) जोड़कर और बढ़ा सकते हैं यदि हम सत्य चाहते हैं मूल्य एक आईडी मान बन जाता है, और गलत अभी भी गलत मूल्य? – gumuruh

5

पीटर कहते हैं कि के रूप में, अपनी आसान का उपयोग कर बढ़ाया DefaultTableModel वर्ग, पूर्व:

class NewTableModel extends DefaultTableModel{ 
     public Class<?> getColumnClass(int columnIndex) { 
      return getValueAt(0, columnIndex).getClass(); 
     } 
    } 
-5

स्विंग डिजाइनर सेट स्तंभ प्रकार में बूलियन को

+1

यह समाधान मानता है कि ओपी किसी प्रकार के यूआई बिल्डर का उपयोग कर रहा है –

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