In this implementation, we provide an property panel for a triangle mesh layer. This panel only contains a field for a layer name, as well as line attributes.
In this example, the JPanel class was created by hand.
TRIANGLEMESHLAYERDISPLAYPANEL.JAVA
package com.interactive.intviewer.tmesh.editor;import com.interactive.intviewer.util.gui.LineProperties;import com.interactive.intviewerapi.IDisposable;import com.interactive.intviewerapi.layers.ILayer2D;import com.interactive.intviewerapi.layers.NamedProps;import java.awt.BorderLayout;import java.awt.GridLayout;import javax.swing.*;import javax.swing.border.TitledBorder;import org.netbeans.validation.api.builtin.Validators;import org.netbeans.validation.api.ui.ValidationGroup;import com.interactive.intviewerapi.editors.utils.LineAttributesPanel;public class TriangleMeshLayerDisplayPanel extends JPanel implements IDisposable { private static final long serialVersionUID = 2463020299625836800L; private JTextField _nameField; private LineAttributesPanel _lineEditor; private ILayer2D layer; public TriangleMeshLayerDisplayPanel() { initComponents(); } public void init(ILayer2D layer) { this.layer = layer; } private void initComponents() { _nameField = new JTextField(""); _lineEditor = new LineAttributesPanel(); _lineEditor.setBorder(new TitledBorder("Line Attributes")); JPanel layerPanel = new JPanel(new GridLayout(1, 2)); layerPanel.setBorder(new TitledBorder("Layer")); layerPanel.add(new JLabel(" Layer Name")); layerPanel.add(_nameField); Box box = new Box(BoxLayout.Y_AXIS); box.add(Box.createVerticalStrut(10)); box.add(layerPanel); box.add(Box.createVerticalStrut(10)); box.add(_lineEditor); box.add(Box.createVerticalStrut(10)); setLayout(new BorderLayout()); setBorder(BorderFactory.createEmptyBorder(10, 25, 10, 25)); add(box, BorderLayout.CENTER); } public void setUp(NamedProps lp) { _nameField.setText(lp.getProperty(ILayer2D.DISPLAY_NAME)); _lineEditor.setLineStyle(lp.getProperty(LineProperties.LINE_STYLE)); _lineEditor.setLineColor(lp.getProperty(LineProperties.LINE_COLOR)); _lineEditor.setLineWidth(lp.getProperty(LineProperties.LINE_WIDTH).intValue()); } public void getProps(NamedProps lp) { lp.putProperty(ILayer2D.DISPLAY_NAME, _nameField.getText()); lp.putProperty(LineProperties.LINE_STYLE, _lineEditor.getLineStyle()); lp.putProperty(LineProperties.LINE_COLOR, _lineEditor.getLineColor()); lp.putProperty(LineProperties.LINE_WIDTH, (float) _lineEditor.getLineWidth()); } @SuppressWarnings("unchecked") public void setUpValidationGroup(ValidationGroup validationGroup) { _nameField.setName("Layer Name"); validationGroup.add(_nameField, Validators.REQUIRE_NON_EMPTY_STRING); } @Override public void dispose() { this.layer = null; } public void refresh() { this.setUp(this.layer.getProperties()); }}TRIANGLEMESHLAYERDISPLAYEDITOR.JAVA
package com.interactive.intviewer.tmesh.editor;import com.interactive.intviewer.view2d.util.HelpCtxUtils;import com.interactive.intviewerapi.IVisual;import com.interactive.intviewerapi.editors.IObjectEditorNode;import com.interactive.intviewerapi.editors.VisualPropertyEditor;import com.interactive.intviewerapi.events.EventBroadcaster;import com.interactive.intviewerapi.events.IEventSubscriber;import com.interactive.intviewerapi.events.PropertyProviderEvent;import com.interactive.intviewerapi.layers.ILayer2D;import com.interactive.intviewerapi.layers.NamedProps;import javax.swing.JDialog;import javax.swing.JPanel;import org.netbeans.validation.api.ui.ValidationPanel;import org.openide.util.HelpCtx;public class TriangleMeshLayerDisplayEditor extends VisualPropertyEditor<ILayer2D> implements IEventSubscriber<PropertyProviderEvent> { private static final long serialVersionUID = 2463020299625836800L; private TriangleMeshLayerDisplayPanel panel; private ValidationPanel validationPanel; private boolean isReady = true; public TriangleMeshLayerDisplayEditor() { } @Override public VisualPropertyEditor getInstance(ILayer2D visual) { return new TriangleMeshLayerDisplayEditor(visual); } public TriangleMeshLayerDisplayEditor(ILayer2D layer) { super(layer); } @Override public boolean isFolder() { return false; } @Override public IObjectEditorNode[] getChildren() { return null; } @Override public JPanel getPanel() { if (this.panel == null) { this.validationPanel = new ValidationPanel(); this.panel = new TriangleMeshLayerDisplayPanel(); this.panel.init(this.getVisual()); this.panel.setUp(this.getVisual().getProperties()); this.panel.setUpValidationGroup(this.validationPanel.getValidationGroup()); this.validationPanel.setInnerComponent(this.panel); } return this.validationPanel; } @Override public HelpCtx getHelpCtx() { return new HelpCtx(HelpCtxUtils.PROPERTY_DISPLAY_PARAMETERS); } @Override public String getDisplayName() { return "Display Parameters"; } @Override public void apply() { try { isReady = false; NamedProps props = new NamedProps(); panel.getProps(props); this.getVisual().setProperties(props, this); } finally { isReady = true; } } @Override public void dispose() { this.unsubscribe(); super.dispose(); if (panel != null) { panel.dispose(); panel = null; } } @Override public boolean canDetach() { return true; } @Override public JDialog onDetach(JPanel panel) { JDialog dialog = super.onDetach(panel); this.subscribe(); return dialog; } @Override public void onEvent(PropertyProviderEvent t) { if (!(isReady)) { return; } IVisual visual = getVisual(); if (visual == null) { return; } if (this.panel == null) { return; } if (t.getPropertyProvider() != visual) { return; } panel.refresh(); } public void subscribe() { EventBroadcaster.getInstance().subscribe(PropertyProviderEvent.class, this, true); } public void unsubscribe() { EventBroadcaster.getInstance().unsubscribe(PropertyProviderEvent.class, this); }}XSECTIONTRIANGLEMESHLAYER.JAVA (EXTRACT)
@Override public IObjectEditorNode getObjectEditorNode() { VisualPropertyEditor rpe = new VisualPropertyEditor (this); rpe.addEditor(new TriangleMeshLayerDisplayEditor(this)); return rpe; } @Override public void setObjectEditorNodeVisible(boolean visible) { if (visible) { IObjectEditorNode editor = this.getObjectEditorNode(); HelpCtx help = new HelpCtx(HelpCtxUtils.PROPERTY); TabPropertiesPanel pp = new TabPropertiesPanel(); PanelManager pm = new PanelManager(editor); pp.setPanelManager(pm); IntViewerDialogDisplayer.getDefault().notify(pp, editor.getDisplayName(), IntViewerDialogDisplayer.OK_APPLY_CANCEL_OPTION, help, pm); } }