private TitledComponent createPropertyGroupPanel(PropertyGroup propertyGroup) { JPanel propertiesPanel = new JPanel(); // create and add properties to panel if (propertyGroup.getProperties().size() > 0) { createPropertyPanel(propertyGroup, propertiesPanel); } else { JLabel emptyLabel = new JLabel("(empty)"); emptyLabel.setFont(emptyLabel.getFont().deriveFont(Font.ITALIC)); propertiesPanel.add(emptyLabel); } // setup panel border propertiesPanel.setBorder(propertyGroupPanelBorder); // add panel to foldable titled component String title = getCaptionFor(propertyGroup); TitledComponent groupPanel = createTitledComponent(title, propertiesPanel); propertiesView.setupPropertyGroupTitledComponent(propertyGroup, groupPanel); return groupPanel; }
private JPanel createPropertyPanel( IObjectWithProperties objectWithProperties, JPanel propertyPanel) { if (null == propertyPanel) { propertyPanel = new JPanel(); } if (null == objectWithProperties || null == objectWithProperties.getProperties()) { return propertyPanel; } Collection<? extends IObjectWithProperties> properties = objectWithProperties.getProperties(); int numProperties = properties.size(); // setup layout double[][] layoutSize = new double[2][]; layoutSize[0] = new double[] {TableLayout.FILL}; // columns layoutSize[1] = new double[numProperties]; // rows Arrays.fill(layoutSize[1], TableLayout.PREFERRED); // set all rows to preferred size propertyPanel.setLayout(new TableLayout(layoutSize)); int row = 0; for (IObjectWithProperties aProperty : properties) { JPanel aPropertyRow = null; // Property Component if (aProperty instanceof AbstractPropertyComponent) { aPropertyRow = createPropertyComponentPanel((AbstractPropertyComponent) aProperty); // Property Group } else if (aProperty instanceof PropertyGroup && null != aProperty.getPropertiesObjectName() && !aProperty.getPropertiesObjectName().isEmpty()) { aPropertyRow = createPropertyGroupPanel((PropertyGroup) aProperty); // Property: get component } else if (aProperty instanceof Property) { Property aPropertyLeaf = (Property) aProperty; // FIXME don't create/add any component if the component type is "none" if (aPropertyLeaf.getComponentType().equals(Property.COMPONENT_TYPE_NONE)) { aPropertyRow = new JPanel(); } else { aPropertyRow = createPropertyComponentPanel(propertiesView.getComponentFor((Property) aProperty)); } } // other: recursive handling if (null == aPropertyRow) { aPropertyRow = createPropertyPanel(aProperty, null); aPropertyRow.setBorder( new ColorBorder(PropertyCardsConfig.propertyTitleBgColor2.brighter(), 0, 0, 1, 0)); } propertyPanel.add(aPropertyRow, "0 " + row++); } return propertyPanel; }