2009-08-03 16 views
12

मुझे जेटीआर में चेकबॉक्स जोड़ने की जरूरत है। एक कस्टम TreeCellRenderer/TreeCellEditor सही दृष्टिकोण की तरह लगता है। अब तक मैंने the CheckBoxNodeRenderer approach in this webpage का उपयोग किया था। यह दो चीजों को छोड़कर ठीक काम करता है:चेकबॉक्स के साथ जेटीआर

  1. चेकबॉक्स के नीचे + ऊपर अतिरिक्त सफेद जगह है; मैं इसे नियमित जेटी के समान रखना चाहता हूं।
  2. मैं चेकबॉक्स पर क्लिक करने के लिए अंतर करना चाहता हूं (जो चेकबॉक्स को टॉगल करने का प्रयास करना चाहिए) और चेकबॉक्स से जुड़े पाठ पर क्लिक करना (जो किसी ईवेंट श्रोता को इसी पेड़ नोड पर क्लिक करने के रूप में व्याख्या करने की अनुमति देनी चाहिए और ले जो कुछ भी कार्रवाई उचित है)

वहाँ इन बातों को करने के लिए एक तरीका है? मैंने चेकबॉक्स के साथ जेटीआर के लिए चारों ओर देखा, ज्यादा नहीं मिल सकता। जैइड अच्छा दिखता है लेकिन मुझे इस मामले में मुफ्त ओपन-सोर्स सॉफ्टवेयर (जीपीएल ठीक नहीं है, एलजीपीएल ठीक है) का उपयोग करने की जरूरत है। (या अपना खुद का चेकबॉक्स पेड़ बनाएं)

उत्तर

7

# 2 के लिए, आप पैनल को संपादक/रेंडरर बना सकते हैं, और चेकबॉक्स के साथ एक लेबल जोड़ सकते हैं - लेबल टेक्स्ट होगा, और चेक बॉक्स नहीं होगा इसमें पाठ जोड़ा गया है।

+0

ओह, यह एक अच्छा विचार है, मैंने इसके बारे में सोचा नहीं था। –

+1

बस ध्यान रखें कि यदि आप केवल DefaultTreeCellRenderer कोड की प्रतिलिपि बनाते हैं और जेएलएबल के विस्तार को जेपीनेल के साथ प्रतिस्थापित करते हैं, तो आपको "प्रदर्शन के लिए ओवरराइड" विधियों को भी हटा देना होगा या आपके पास एक खाली JTree होगा। लाइसेंस संकेत के लिए –

4
इस @aperkins सुझाव प्रति

क्या मैं TableCellRenderer में कर समाप्त हो गया है, यह अच्छी तरह से काम करने लगता है: मार्जिन में अवांछित अंतरिक्ष से छुटकारा पाने के लिए

final private JPanel nodeRenderer = new JPanel(); 
final private JLabel label = new JLabel(); 
final private JCheckBox check = new JCheckBox(); 

    ... 

// in constructor: 
final Insets inset0=new Insets(0,0,0,0);   
this.check.setMargin(inset0); 
this.nodeRenderer.setLayout(new BorderLayout()); 
this.nodeRenderer.add(this.check, BorderLayout.WEST); 
this.nodeRenderer.add(this.label, BorderLayout.CENTER); 

कुंजी होने के लिए (क) बुला रहा है चेकबॉक्स मार्जिन को कम करने के लिए JCheckBox.setMargin(), और (बी) जेपीनल के लिए सीमावर्तीकरण का उपयोग करना।

9

मैं इस सवाल पहले से ही उत्तर दिया गया है पता है, लेकिन मैं सिर्फ कुछ बिंदुओं को स्पष्ट करना चाहते हैं:

1) Jide आम लेयर दोहरे लाइसेंस (जीपीएल classpath अपवाद और वाणिज्यिक लाइसेंस) के साथ है। इसका मतलब है कि आप किसी भी लाइसेंसिंग मुद्दों के बिना सामान्य परत परियोजना का उपयोग कर सकते हैं। पुष्टि करने के लिए कृपया निम्न लिंक देखें: http://www.jidesoft.com/products/oss.htm। सामान्य परत में एक चेक करने योग्य JTree (com.jidesoft.swing.checkBoxTree) का कार्यान्वयन शामिल है।

2) 2005 से एक मास्टर मास्टर, संतोष कुमार से एक ब्लॉग है, जहां वह बताता है कि आपके द्वारा उल्लिखित आवश्यकताओं के साथ चेकबॉक्स के साथ जेटी को कैसे कार्यान्वित किया जाए: http://www.jroller.com/santhosh/entry/jtree_with_checkboxes। मेरी राय में, इसे पढ़ने लायक है।

+0

+1 –

+1

जैइड कॉमन लेयर आपकी सभी कॉलर योजना को ब्रोक करता है क्योंकि यह अपना यूआई इंस्टॉल करता है, इसे ठीक करने के बारे में नहीं पता, अगर कोई जानता है कि इसे कैसे साझा करें। – Bax

2

मैंने मैवेन सेंट्रल से org.scijava:swing-checkbox-tree के रूप में उपलब्ध एक स्टैंडअलोन Swing Checkbox Tree प्रोजेक्ट जारी किया है।

पैकेज जॉन जुकोव्स्की के CheckBox Node Tree Sample कोड पर आधारित है। यह बीएसडी -2 लाइसेंस है, जिसमें कोई निर्भरता नहीं है।

यह DefaultMutableTreeNode और CheckBoxNodeData नोड प्रकारों के मिश्रण और मिलान की अनुमति देता है। यह गैर-पत्ती नोड्स के रूप में चेक बॉक्स नोड्स को भी अनुमति देता है।

प्रश्न के मुद्दे के बारे में # 1: मैंने सभी प्लेटफार्मों पर परीक्षण नहीं किया, लेकिन मेरे ओएस एक्स सिस्टम पर, CheckBoxNodeData नोड DefaultMutableTreeNode नोड्स के समान पिक्सेल में बिल्कुल समान ऊंचाई हैं।

के बारे में सवाल का मुद्दा # 2: यह एक JPanel (aperkins के रूप में पता चलता है) में एक JCheckBox + JLabel का उपयोग करता है (जाँच करने के लिए/एक नोड हटाते) एक लेबल बनाम एक चेक बॉक्स पर क्लिक के बीच अंतर करने (एक नोड का चयन करने के लिए) ।

उदाहरण उपयोगों:

बाद उदाहरण भी रिकर्सिवली बक्से के जवाब में subtrees टॉगल जाँच की जा रही या अनियंत्रित (treeNodesChanged देखने के लिए कोड है तरीका)।

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