2009-05-11 9 views
9

Para tener una ventana de inspector de propiedades de Netbeans, estoy haciendo uso de la siguiente clase para ayudarme a lograr esto.Tener com.l2fprod.common.propertysheet.PropertySheetPanel para mostrar la clase compuesta

com.l2fprod.common.propertysheet.PropertySheetPanel

Hasta el momento, funciona bien para la clase con propiedades simples como String, int ...

Sin embargo, cuando venga a poco complicado clase con relación, mezclados , las cosas se vuelven más complicadas

Por ejemplo, tengo dos animales (interfaz). Uno es Cat (clase simple con nombre y edad) y Dog (Otra clase simple con nombre y edad).

No es necesario mostrarlos a través de las ventanas de la GUI.

Sin embargo, cuando venga a clase con una relación compuesta. Un zoológico, que puede contener varios animales (una clase con una lista de arrays para contener animales), tengo un problema para mostrar todas las propiedades de los animales en una sola ventana.

El siguiente es el lanzamiento de la pantalla se muestra aquí

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

código fuente parcial

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

El código fuente completo se puede descargar desde

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

Deseo dentro de las ventanas del "Zoo", puede mostrar todas las propiedades de todos los animales.

+0

Estoy muy interesado en si ha encontrado una solución a este problema. Tengo exactamente el mismo problema – I82Much

Respuesta

0

PropertySheetPanel como solo llena su tabla leyendo las propiedades de un Java Bean dado.

Debe extender el comportamiento de PropertySheetPanel y rellenar las propiedades de una colección determinada. Itere su colección y use addProperty (Propiedad) para rellenar la tabla.

También puede usar instrospection o beanutils lib para descubrir los elementos de la colección.

EDITAR: Ejemplo agregado.

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

Este es un ejemplo de clase con campos primitivos. Sin embargo, estoy buscando una respuesta para la clase con campo compuesto. Aquí está mi solución para la clase con campos primitivos. http://jstock.cvs.sourceforge.net/viewvc/jstock/jstock/src/org/yccheok/jstock/gui/ObjectInspectorJPanel.java?view=markup –

Cuestiones relacionadas