Как добавить меню, чтобы изменить макет графика с помощью Юнга - PullRequest
1 голос
/ 26 января 2011

Как добавить строку меню q для изменения макета графика Юнга (например, StaticLayout, SpringLayout и т. Д.)?


Фактически это то, что у меня уже есть:

JFrame frame = new JFrame("JUNG2 based GraphVisualization Tool");
        // Create a graph 
        SparseMultigraph<MyNode, MyEdge> graph = new SparseMultigraph<MyNode, MyEdge>();
        // We want to give the Nodes a point where to be (for later use)
        //Map<MyNode, Point2D> vertexLocations = new HashMap<MyNode, Point2D>();
        // Also we need a Layout
        Layout<MyNode, MyEdge> layout = new StaticLayout(graph);
        layout.setSize(new Dimension(600, 600));
        // VisualizationViewer to Visualize our nodes and edges
        VisualizationViewer<MyNode, MyEdge> vv = new VisualizationViewer<MyNode, MyEdge>(layout);
        vv.setPreferredSize(new Dimension(650, 650));
        // To show the vertex and EdgeLabels
        vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
        vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller());
        // Our mouse should be usable in different modes
        EditingModalGraphMouse mouse = new EditingModalGraphMouse(vv.getRenderContext(), MyNodeFactory.getInstance(), MyEdgeFactory.getInstance());
        // Default values for new edges
        MyEdgeFactory.setDefaultCapacity(100.0);
        MyEdgeFactory.setDefaultWeight(5.0);

        // Popupmenu
        PopupNodeEdgeMenuMousePlugin nodeEdgePlugin = new PopupNodeEdgeMenuMousePlugin();
        JPopupMenu nodeMenu = new MyMouseMenus.NodeMenu();
        JPopupMenu edgeMenu = new MyMouseMenus.EdgeMenu(frame);
        nodeEdgePlugin.setNodePopup(nodeMenu);
        nodeEdgePlugin.setEdgePopup(edgeMenu);
        // The already existing popup editing plugin has to be removed
        mouse.remove(mouse.getPopupEditingPlugin());
        // And the new one has to be added
        mouse.add(nodeEdgePlugin);
        // set up the new mouse for the VisualizationViewer
        vv.setGraphMouse(mouse);

        // A JFrame to show all the stuff
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(vv);

        // To change the mouse modes, the tutorial shows a menuBar. Think it would be nice to have a toolbar here!
        JMenuBar menuBar = new JMenuBar();
        JMenu modeMenu = mouse.getModeMenu();
        modeMenu.setText("Mouse Mode");
        modeMenu.setIcon(null);
        modeMenu.setPreferredSize(new Dimension(80,20));
        menuBar.add(modeMenu);
        frame.setJMenuBar(menuBar);
        mouse.setMode(ModalGraphMouse.Mode.EDITING);
        frame.pack();
        frame.setVisible(true);

Извините, я новичок в Java, поэтому было бы здорово, если бы вы предложили мне, что делать в соответствии с моим кодом. Спасибо

1 Ответ

0 голосов
/ 26 января 2011

Тот факт, что у вас есть график Юнга, на самом деле не меняет того, что вам нужно делать. 1. Создайте JMenuBar и прикрепите его к JFrame, в котором вы хотите выбрать меню. 2. Добавьте JMenuItems, с которыми связаны действия или ActionListeners. 3. Создайте метод или методы в вашем графическом интерфейсе, которые изменяют макет контейнера с помощью Graph. (Возможно, придется добавить / удалить компоненты или, возможно, просто полностью перестроить эту часть графического интерфейса). 4. Пусть ActionListener вызывает соответствующий метод.

...