2011-06-07 18 views
6

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

public abstract class AbstractTable extends AbstractTableModel{ 

    public Class<? extends Object> getColumnClass(int c) {} 
} 

क्योंकि मैंने getColumnClass विधि लागू की है, बूलियन मान तालिका में चेकबॉक्स जैसे प्रस्तुत किए जाते हैं। मैं चेकबॉक्स के स्थिति में परिवर्तन को रोकना चाहता हूं लेकिन दुर्भाग्य से मैं सीधे माउस श्रोता नहीं जोड़ सकता, क्योंकि मेरे पास चेकबॉक्स का संदर्भ नहीं है, जिसे यह मेरे द्वारा नहीं बनाया गया है।

चेकबॉक्स स्थिति परिवर्तन घटना को रोकने के लिए मैं माउस श्रोता कैसे सेट कर सकता हूं?

संपादित करें:

@jzd उत्तर सही है। मैं setValue विधि में परिवर्तन पकड़ सकता हूँ। लेकिन मैं जानना चाहता हूं कि माउस श्रोता आधारित दृष्टिकोण को कैसे कार्यान्वित किया जाए।

उत्तर

6

विशेष रूप से, मैं setValue() के अंदर तर्क डालने से बचना चाहता हूं।

चयन मूल्यों की इस example में, setValue() विधि ओवरराइड नहीं है, छोड़कर आंतरिक डेटा संरचना को अद्यतन करने और उचित घटना आग। ValueEditorAbstractCellEditor बढ़ाता है और ItemListener लागू करता है, जबकि ValueRendererJCheckBox फैलाता है। इस तरह संपादक संपादक के itemStateChanged() के अंदर रेंडरर के JCheckBox को सुन सकता है।

Addendum: CellEditorListener जोड़ना एक और तरीका है, hereJTree के लिए दिखाया गया एक और तरीका है। ध्यान दें कि JTable स्वयं CellEditorListener है।

+1

+1: हाँ .. यह वही है जो मैं ढूंढ रहा था। धन्यवाद – Heisenbug

+0

अच्छा, वास्तव में अच्छा एक, +1, – mKorbel

+1

+1 ... यह 10 वीं ट्रैशगोड पोस्ट होना है जिसने मुझे इस सप्ताह स्विंग के साथ बेहद मदद की है! – The111

3

माउस श्रोता जोड़ने की तरह लगता है एक अतिरिक्त कदम है। मैं मॉडल की setValue() विधि में परिवर्तन को रोकने में सुझाव देना चाहूंगा।

आप setValue() विधि परिवर्तित नहीं कर सकते हैं तो अगले सबसे अच्छी बात एक CustomEditor क्योंकि इस पकड़ने और करें डिफ़ॉल्ट रूप बूलियन संपादक से भी माउस को छिपाने के लिए एक अच्छा तरीका नहीं है कि परिवर्तन को अवरुद्ध कर देगा है।

+0

हाँ मैं कर सकता था। वैसे भी मैं जानना चाहता हूं कि यह भी संभव है और माउस श्रोता के साथ यह कैसे होता है। मैं अब से इस तरह से करता हूँ। मेरा टेबल मॉडल वर्ग थोड़ा जटिल है। मैं टेबल श्रोता से, उस स्थिति को बदलने के लिए माउस श्रोता का उपयोग करना चाहता हूं जिसे मैं स्थिति में बदलना चाहता हूं। विशेष रूप से मैं logValue के अंदर तर्क डालने से बचना चाहता हूं। वैसे भी – Heisenbug

+0

@ ओवरबोज, किसी अन्य विकल्प के साथ उत्तर द्वारा अपडेट किया गया। – jzd

+0

कृपया मेरी पोस्ट देखें – mKorbel

5

मैं @jzd सलाह के साथ विरोध नहीं कर सकते हैं वास्तव में नहीं, मुझे लगता है कि नहीं, यह सुनिश्चित नहीं है कि मुझे सोचा TableMode#setValue जा रहा है,

लेकिन मूल रूप से दो विकल्प

1) TableModelListener

2 हैं) AFAIK केवल TableCellEditor # isCellEditable ऐसा कर सकते हैं JCheckBox या JRadioButton के साथ कनेक्शन में JTable में

public boolean isCellEditable(EventObject getEvent) { 
    MouseEvent me = (MouseEvent) getEvent; 
    JTable table = (JTable) (me.getSource()); 
    Point point = me.getPoint(); 
    int column = table.columnAtPoint(point); 
    int row = table.rowAtPoint(point); 
    Rectangle rec = table.getCellRect(row, column, true); 
    //... 
} 
0

मैं बिल्कुल वैसा ही समस्या हो रही थी, और मुझे यह भी पता है कि आप विशेष रूप से चेकबॉक्स संपादक को एक माउस श्रोता के लिए कहा, लेकिन एक workarround वर्णित here अनुभाग "डेटा परिवर्तन के लिए सुनकर" के तहत एक TableModelListener के रूप में जोड़ने जा सकता है, और जब आप परिवर्तन का पता लगाते हैं तो व्यवहार को अनुकरण करने का प्रयास करें, लेकिन यदि आप जानना चाहते हैं कि माउस चेकबॉक्स पर कब है या < माउस की विशिष्ट कार्रवाइयों जैसी चीजें>, मुझे डर है कि आपको अपना खुद का बनाना होगा एक सेल संपादक का कार्यान्वयन, जो उन व्यवहारों को लागू करता है ...कम से कम यह है कि मैं क्या करूंगा ...

Grettings! ...

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