2009-05-11 13 views
9

नेटबीन को संपत्ति निरीक्षक विंडो पसंद करने के लिए, मैं इसे प्राप्त करने में सहायता के लिए निम्न श्रेणी का उपयोग कर रहा हूं।com.l2fprod.common.propertysheet.PropertySheetPanel को मिश्रित कक्षा प्रदर्शित करने के लिए

com.l2fprod.common.propertysheet.PropertySheetPanel

अब तक, यह स्ट्रिंग, पूर्णांक की तरह साधारण गुणों के साथ वर्ग के लिए ठीक काम करता है ...

हालांकि, जब आ कंपोज़िट रिश्ते के साथ थोड़ा जटिल वर्ग के लिए चीजें अधिक जटिल हो जाती हैं।

उदाहरण के लिए, मेरे पास दो जानवर हैं (इंटरफ़ेस)। एक बिल्ली है (नाम और उम्र के साथ सरल वर्ग) और कुत्ता (नाम और उम्र के साथ एक और सरल वर्ग)।

इसे जीयूआई विंडोज़ के माध्यम से प्रदर्शित करने का कोई प्रयास नहीं होता है।

हालांकि, जब मिश्रित संबंध के साथ कक्षा में आते हैं। एक चिड़ियाघर, जिसमें कई जानवर हो सकते हैं (जानवरों को पकड़ने के लिए सरणी सूची वाला एक वर्ग), मुझे एक ही खिड़की के भीतर सभी जानवरों की संपत्तियों को प्रदर्शित करने में समस्या है।

निम्न स्क्रीन शूट

alt text http://yancheng.cheok.googlepages.com/object-inspector.png

आंशिक स्रोत कोड यहाँ दिखाया गया है है

ObjectInspectorJFrame objectInspectorJFrame0 = new ObjectInspectorJFrame(cat); 
    objectInspectorJFrame0.setVisible(true); 
    objectInspectorJFrame0.setState(java.awt.Frame.NORMAL); 

    ObjectInspectorJFrame objectInspectorJFrame1 = new ObjectInspectorJFrame(dog); 
    objectInspectorJFrame1.setVisible(true); 
    objectInspectorJFrame1.setState(java.awt.Frame.NORMAL); 

    // I wish to see all "animals" and their properties in this windows. :(
    // How? 
    ObjectInspectorJFrame objectInspectorJFrame2 = new ObjectInspectorJFrame(zoo); 
    objectInspectorJFrame2.setVisible(true); 
    objectInspectorJFrame2.setState(java.awt.Frame.NORMAL); 

पूरा स्रोत कोड

http://yancheng.cheok.googlepages.com/sandbox.zip

काश से डाउनलोड किया जा सकता"चिड़ियाघर" खिड़कियों के भीतर, यह सभी जानवरों के लिए सभी गुण प्रदर्शित कर सकते हैं।

+0

मुझे इस समस्या का समाधान मिला है या नहीं, मुझे बहुत दिलचस्पी है। मेरे पास बिल्कुल एक ही समस्या है – I82Much

उत्तर

0

PropertySheetPanel केवल एक दिए गए जावा बीन के गुणों को पढ़ने के लिए अपनी तालिका को पॉप्युलेट करता है।

आपको PropertySheetPanel व्यवहार का विस्तार करने और किसी दिए गए संग्रह से गुणों को पॉप्युलेट करने की आवश्यकता है। अपने संग्रह को दोहराएं और तालिका को पॉप्युलेट करने के लिए addProperty (Property) का उपयोग करें।

संग्रह संग्रह तत्वों को खोजने के लिए आप instrospection या beanutils lib का भी उपयोग कर सकते हैं।

संपादित करें: उदाहरण जोड़ा गया।

package com.stackoverflow.swing.PropertySheetPanel; 

import java.util.ArrayList; 
import java.util.Collection; 

import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 

import com.l2fprod.common.propertysheet.DefaultProperty; 
import com.l2fprod.common.propertysheet.PropertySheetPanel; 

/** 
* An example that creates a l2fprod PropertySheetPanel that displays any 
* Collection. 
*/ 
public class CollectionPropertySheet<C> extends PropertySheetPanel { 

    // Choose some bean. An animal as example. 
    static class Animal { 
     private String name; 
     private String family; 

     public Animal(String name, String family) { 
      this.name = name; 
      this.family = family; 
     } 

     @Override public String toString() { 
      return name + " " + family; 
     } 
    } 

    /** 
    * @param simpleModel The input collection as data model. 
    */ 
    public CollectionPropertySheet(Collection<C> simpleModel) { 
     super(); 
     populateCollectionProperties(simpleModel); 
    } 

    private void populateCollectionProperties(Collection<C> collection) { 
     int index = 0; 
     for (C entry : collection) { 
      // Define property properties 
      DefaultProperty property = new DefaultProperty(); 
      property.setDisplayName(entry.getClass().getSimpleName() + "[" + index++ +"]"); 
      property.setValue(entry.toString()); 
      // Set any other properties ... 
      // and add. 
      addProperty(property); 
     } 
    } 

    // Start me here! 
    public static void main(String[] args) { 
     // Inside EDT 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override public void run() { 
       JFrame frame = new JFrame("A simple example..."); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new CollectionPropertySheet<Animal>(getAnimals())); 
       frame.pack(); 
       frame.setVisible(true); 
      } 

      private Collection<Animal> getAnimals() { 
       Collection<Animal> animals = new ArrayList<Animal>(); 
       animals.add(new Animal("Lion", "Felidae")); 
       animals.add(new Animal("Duck", "Anatidae")); 
       animals.add(new Animal("Cat", "Felidae")); 
       return animals; 
      } 
     }); 
    } 

} 
+0

यह प्राचीन क्षेत्रों वाले वर्ग का उदाहरण है। हालांकि, मैं मिश्रित क्षेत्र के साथ कक्षा के लिए जवाब की तलाश में हूं। यहां आदिम क्षेत्रों वाले वर्ग के लिए मेरा समाधान है। http://jstock.cvs.sourceforge.net/viewvc/jstock/jstock/src/org/yccheok/jstock/gui/ObjectInspectorJPanel.java?view=markup –

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

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