2009-05-11 1 views
9

Um eine Netbeans Eigenschaften Inspektor Windows gemocht zu haben, verwende ich die folgende Klasse, um mir dabei zu helfen, dies zu erreichen.Haben com.l2fprod.common.propertysheet.PropertySheetPanel Composite-Klasse anzeigen

com.l2fprod.common.propertysheet.PropertySheetPanel

Bisher ist es für die Klasse mit einfachen Eigenschaften wie String, int gut funktioniert ...

Wenn jedoch kommen, um etwas komplizierte Klasse mit composited Beziehung Dinge werden komplizierter.

Zum Beispiel habe ich zwei Tiere (Schnittstelle). Einer ist Cat (Einfache Klasse mit Namen und Alter) und Dog (Eine andere einfache Klasse mit Namen und Alter).

Es erfordert keine Mühe, sie über GUI-Fenster anzuzeigen.

Allerdings, wenn Sie mit komposited Beziehung zur Klasse kommen. Ein Zoo, der mehrere Tiere enthalten kann (Eine Klasse mit Array-Liste, um Tiere zu halten), habe ich Probleme, alle Tiereigenschaften in einem einzigen Fenster anzuzeigen.

Im Folgenden ist der Bildschirm schießen

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

Teilcode Quelle hier gezeigt wird

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); 

komplette Quellcode kann von

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

Ich wünsche heruntergeladen werden Innerhalb von "Zoo" -Fenstern können alle Eigenschaften für alle Tiere angezeigt werden.

+0

Ich bin sehr interessiert, ob Sie eine Lösung für dieses Problem gefunden haben. Ich habe genau das gleiche Problem – I82Much

Antwort

0

PropertySheetPanel as füllt nur seine Tabelle und liest die Eigenschaften für ein bestimmtes Java Bean.

Sie müssen das PropertySheetPanel-Verhalten erweitern und die Eigenschaften einer bestimmten Sammlung auffüllen. Iterieren Sie Ihre Sammlung und verwenden Sie addProperty (Property), um die Tabelle aufzufüllen.

Sie können auch instrospection oder beanutils lib verwenden, um die Auflistungselemente zu ermitteln.

EDIT: Beispiel hinzugefügt.

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

Dies ist ein Beispiel für eine Klasse mit primitiven Feldern. Ich suche jedoch eine Antwort für die Klasse mit Composite-Bereich. Hier ist meine Lösung für die Klasse mit primitiven Feldern. http://jstock.cvs.sourceforge.net/viewvc/jstock/jstock/src/org/yccheok/jstock/gui/ObjectInspectorJPanel.java?view=markup –

Verwandte Themen