Джава. grapgstream: проблема краев расхождения - PullRequest
0 голосов
/ 24 апреля 2019

Я использую библиотеку graphstream для создания приложения.Когда я увеличиваю график, используя view.getCamera (). SetPercent (), некоторые узлы будут скрыты, до сих пор проблем не было.Моя проблема в том, что когда буксирные узлы, соединенные ребром, скрываются после масштабирования графика, его ребро также будет скрыто.Я хочу сохранить этот край таким, каким он был, даже если его конечности скрыты.Я попробовал этот код, чтобы объяснить мою проблему:

public class Zoom {

    public static void main(String[] args) {

        //create a simple graph
        Graph graph = new SingleGraph("Zoom");
        graph.setAttribute("ui.stylesheet", "node{size:30px; fill-color:red; text-size:20;}");
        Node[] nodes = new Node[2];

        for (int i = 0; i < 2; i++) {
            nodes[i] = graph.addNode("" + i);
            nodes[i].setAttribute("ui.label", "" + i);
        }
        graph.addEdge("01", "0", "1");

        //create the viewer
        Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
        viewer.enableAutoLayout();
        ViewPanel view_panel = viewer.addDefaultView(false);

        //create the main frame
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout());
        frame.setLocation(new Point(200, 200));
        frame.setPreferredSize(new Dimension(600, 400));

        //the function responsible of zooming
        frame.addMouseWheelListener(new MouseWheelListener() {
            @Override
            public void mouseWheelMoved(MouseWheelEvent mwe) {
                double scaleZoom;
                if (Event.ALT_MASK != 0) {
                    scaleZoom = viewer.getDefaultView().getCamera().getViewPercent();
                    if (mwe.getWheelRotation() > 0) {
                        scaleZoom += 0.05;
                        viewer.getDefaultView().getCamera().setViewPercent(scaleZoom);
                    } else if (mwe.getWheelRotation() < 0) {
                        if (scaleZoom > 0.05) {
                            scaleZoom -= 0.05;
                            viewer.getDefaultView().getCamera().setViewPercent(scaleZoom);
                        }
                    }
                }
            }
        });
        view_panel.setPreferredSize(new Dimension(frame.getPreferredSize()));
        frame.add(view_panel);
        frame.pack();
        frame.setVisible(true);
    }
}

Любая помощь, пожалуйста.

1 Ответ

0 голосов
/ 24 апреля 2019

К сожалению, когда два компонента ребра исчезают, ребро тоже скрывается. Это естественное поведение для экономии памяти, я не думаю, что вы можете избежать этого.

Кроме того, для обычного масштабирования graphstream обрабатывайте его , естественно, с помощью клавиши вверх / вниз страницы, вам не нужно делать это самостоятельно.

...