The class TypeVisualizerFactory acts as a factory that creates visualizers (JAXFront GUI components) for a JAXFront type (a representation of a schema node). It allows to create a bundle of GUI elements that might be placed on different panels or frames. The created GUI components implements the interface Visualizer.
See class com.jaxfront.demo.api.OwnLayoutManager |
public class OwnLayoutManager extends AbstractCompositeView implements ListSelectionListener{ private Document _dom; private JPanel _detailPanel; protected void defaultBuild() { setLayout(new BorderLayout()); try { URL xsdURL = URLHelper.getUserURL("examples/purchaseOrder/po.xsd"); URL xmlURL = URLHelper.getUserURL("examples/purchaseOrder/po.xml"); URL xuiURL = URLHelper.getUserURL("examples/purchaseOrder/po.xui"); _dom = DOMBuilder.getInstance().build(null,xsdURL, xmlURL, xuiURL, "purchaseOrder"); JPanel upperPanel = new JPanel(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.HORIZONTAL; Type purchaseOrderRoot = _dom.getRootType(); JComponent visualizer = (JComponent)TypeVisualizerFactory.getInstance().getVisualizer(purchaseOrderRoot.getDirectChild("orderDate")); c.weightx = 0.5; c.gridx = 0; c.gridy = 0; upperPanel.add(visualizer, c); visualizer = (JComponent)TypeVisualizerFactory.getInstance().getVisualizer(purchaseOrderRoot.getDirectChild("deliveryOption")); c.gridx = 1; c.gridy = 0; upperPanel.add(visualizer, c); visualizer = (JComponent)TypeVisualizerFactory.getInstance().getVisualizer(purchaseOrderRoot.getDirectChild("email")); c.gridx = 0; c.gridy = 1; upperPanel.add(visualizer, c); JPanel lowerPanel = new JPanel(new BorderLayout()); _detailPanel = new JPanel(new BorderLayout()); JList list = new JList(new String[]{"shipTo", "billTo", "paymentMethod", "item"}); list.addListSelectionListener(this); list.setBorder(BorderFactory.createEtchedBorder()); JScrollPane scrollPane = new JScrollPane(list); scrollPane.setPreferredSize(new Dimension(200,200)); JPanel listPanel = new JPanel(new BorderLayout()); listPanel.add(scrollPane, BorderLayout.NORTH); lowerPanel.add(listPanel, BorderLayout.WEST); lowerPanel.add(_detailPanel, BorderLayout.CENTER); add(upperPanel, BorderLayout.NORTH); add(lowerPanel, BorderLayout.CENTER); } catch (DocumentCreationException ex) { LogRegistry.getInstance().warn(getClass(), "Error while creating po.xsd DOM: " + ex.getLocalizedMessage()); } } public void setApplicationRequired(boolean aBoolean) {} public void setRequired(boolean aBoolean) {} public void valueChanged(ListSelectionEvent e) { _detailPanel.removeAll(); String name = (String)((JList)e.getSource()).getSelectedValue(); JComponent visualizer = (JComponent)TypeVisualizerFactory.getInstance().getVisualizer(_dom.getRootType().getDirectChild(name)); _detailPanel.add(visualizer, BorderLayout.CENTER); _detailPanel.updateUI(); } } |
Create a JComponent from any type you want. The returned JComponent will care about event handling (populate model/populate view) and rules defined in the XUI. |