Как изменить внешний вид графика в JUNG - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь визуализировать граф дерева с помощью библиотеки JUNG.

Код, который я использую:

    JPanel base = new JPanel();

    Graph<String, String> grafo = OntologyGraph.getGraph(ontology);

    Layout<String, String> layout = new TreeLayout<String, String>((Forest<String, String>) grafo);
    VisualizationViewer<String, String> vv = new VisualizationViewer<String, String>(layout);

    vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller<String>());
    vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller<String>());
    vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);

    final DefaultModalGraphMouse<String, Number> graphMouse3 = new DefaultModalGraphMouse<>();
    vv.setGraphMouse(graphMouse3);
    graphMouse3.setMode(DefaultModalGraphMouse.Mode.PICKING);

    base.add(vv);

    return base;

Отображает это
enter image description here

Теперь я хочу изменить окруженные вершины с помеченной JButton и увеличить расстояние между ними, но я не могу найти учебник в Интернете, чтобы достичь этого.

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Вот пример кода, который вы можете использовать для открытия JFrame с информацией об узле, по которому щелкнули (когда вы находитесь в режиме выбора).Если вы хотите, чтобы он реагировал на щелчки узлов, даже когда вы находитесь в режиме преобразования, вам придется немного изменить graphmouseplugins, чтобы не удалять PickingGraphMousePlugin в режиме преобразования.

    vv.getRenderContext().getPickedVertexState().addItemListener(new ItemListener(){
        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {
                JFrame frame = new JFrame("Vertex "+e.getItem()+" picked");
                frame.getContentPane().add(new JButton("hello from "+e.getItem()));
                frame.setSize(new Dimension(200,100));
                frame.setLocation(200, 200);
                frame.setVisible(true);
            }
        }
    });

Если вы хотите, чтобы вершины выглядели больше как прямоугольные кнопки, может помочь VertexLableAsShapeDemo.Эта демонстрация использует JLabels для рисования вершин

0 голосов
/ 11 марта 2019

Изменение расстояния между узлами достаточно просто; просто используйте конструктор TreeLayout, который принимает параметры distx и disty.

Предоставление JButton для каждого узла не является чем-то, что JUNG изначально поддерживает, хотя вы могли бы сделать несколько взломов, чтобы включить его.

Какую проблему вы пытаетесь решить, используя JButtons для узлов?

...