public void init() {
        String fileNameValidTransitionTable = null;
        try {
            fileNameValidTransitionTable = Util.getStringProperty("FileNameValidTransitionTable");
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            transitions = createValidTransitionTable(fileNameValidTransitionTable);
        } catch (IOException e) {
            log.error("JGraphAdapterDemo.init() IOException " + e.getMessage());
            return;
        } catch (InvalidStateException e) {
            log.error("JGraphAdapterDemo.init() InvalidStateException " + e.getMessage());
            return;
        }

        // create a JGraphT graph
        ListenableGraph<String, DefaultEdge> g = new ListenableDirectedMultigraph<String, DefaultEdge>( DefaultEdge.class);

        // create a visualization using JGraph, via an adapter
        jgAdapter = new JGraphModelAdapter<String, DefaultEdge>(g);

        JGraph jgraph = new JGraph(jgAdapter);

        adjustDisplaySettings(jgraph);
        getContentPane().add(jgraph);
        resize(DEFAULT_SIZE);

        for (int i=1; i<colNames.length; i++) {
            g.addVertex(colNames[i]);
           // positionVertexAt(colNames[i], 520-i*100, 0+i*50);
        }

        for (int i=1; i<colNames.length; i++) {
            for (int j=1;j<colNames.length; j++) {
                if (transitions[j-1][i-1].doTransition) {
                    g.addEdge(colNames[i], colNames[j]);
                }
            }
        }

        //JGraphSpringLayout layout = new JGraphSpringLayout(20);
        //JGraphAnnealingLayout layout = new JGraphAnnealingLayout();


        final JGraphSimpleLayout layout = new JGraphSimpleLayout(JGraphSimpleLayout.TYPE_CIRCLE, 400, 200);
        final JGraphFacade facade = new JGraphFacade(jgraph);
        layout.run(facade);
        jgraph.getGraphLayoutCache().edit(facade.createNestedMap(true, true));
    }