package com.yoshtec.visual; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import org.junit.Before; import org.junit.Test; import org.netbeans.api.visual.action.ActionFactory; import org.netbeans.api.visual.anchor.Anchor; import org.netbeans.api.visual.anchor.AnchorFactory; import org.netbeans.api.visual.model.ObjectScene; import org.netbeans.api.visual.vmd.VMDNodeWidget; import org.netbeans.api.visual.vmd.VMDPinWidget; import org.netbeans.api.visual.widget.ConnectionWidget; import org.netbeans.api.visual.widget.LabelWidget; import org.netbeans.api.visual.widget.LayerWidget; import org.netbeans.api.visual.widget.Widget; public class Test1 { private class ErrorScene extends ObjectScene{ LayerWidget conLayer = new LayerWidget(this); LayerWidget objLayer = new LayerWidget(this); public ErrorScene(){ addChild(conLayer); addChild(objLayer); } public Widget addNode(String node){ LabelWidget vm = new LabelWidget(this); vm.setLabel(node); vm.getActions().addAction(ActionFactory.createMoveAction()); objLayer.addChild(vm); addObject(node, vm); System.out.println("Node added: " + node + " : " + vm); return vm; } public Widget addPin(String node, String pin){ LabelWidget pinw = new LabelWidget(this); findWidget(node).addChild(pinw); pinw.setLabel(pin); addObject(pin, pinw); System.out.println("Pin Added: " + node + "." + pin + " : " + pinw); return pinw; } public Widget addConnection(String constr, String sourcePin, String targetPin){ Widget startPin = findWidget(sourcePin); Widget stopPin = findWidget(targetPin); ConnectionWidget con = new ConnectionWidget(this); conLayer.addChild(con); this.addObject(constr, con); // normal anchor setting con.setSourceAnchor(AnchorFactory.createRectangularAnchor(startPin)); con.setTargetAnchor(AnchorFactory.createRectangularAnchor(stopPin)); System.out.println("Connection Added: " + constr + " : " + con); return con; } } private JFrame frame; private JScrollPane scrollPane; private String title = "Test1"; public static void main(String[] args){ new Thread(){ @Override public void run() { super.run(); Test1 test1 = new Test1("Error"); test1.init(); test1.testVMDError(); } }.start(); new Thread(){ @Override public void run() { super.run(); Test1 test2 = new Test1("Works"); test2.init(); test2.testVMDError2(); } }.start(); } public Test1(String s){ this.title = s; } @Before public void init(){ // some Swing initialization frame = new JFrame(title); frame.setSize(400, 400); JPanel mainPanel = new JPanel(); mainPanel.setLayout(new java.awt.BorderLayout()); scrollPane = new JScrollPane(); mainPanel.add(scrollPane); frame.setContentPane(mainPanel); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } @Test public void testVMDError(){ ErrorScene gs = new ErrorScene(); gs.addNode("A"); gs.addPin("A", "B"); gs.addNode("X"); gs.addPin("X", "Y"); gs.addConnection("U", "B", "Y"); // throws an exception scrollPane.setViewportView(gs.createView()); } @Test // works public void testVMDError2(){ ErrorScene gs = new ErrorScene(); gs.addNode("A"); gs.addPin("A", "B"); gs.addNode("X"); gs.addPin("X", "Y"); scrollPane.setViewportView(gs.createView()); gs.addConnection("U", "B", "Y"); } }