GraphStream图形未完全呈现 [英] GraphStream graph not rendered corectly

查看:127
本文介绍了GraphStream图形未完全呈现的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在尝试以表格形式显示图形时,我有以下代码. 对于3个节点,该代码运行良好,但是在添加其他节点后,该图无法完全显示.我不知道问题出在哪里.

I have the following code while trying to display a graph in a form. For 3 nodes the code works well but after adding other nodes the graph is not showed entirely. I have no idea where the problem can be.

public class Test{
public static void main(String args[]) throws IOException{

    final DefaultGraph g = new DefaultGraph("my beautiful graph");
g.setStrict(false);
    Viewer viewer = new Viewer(g, Viewer.ThreadingModel.GRAPH_IN_GUI_THREAD);
    JFrame myJFrame = new JFrame();
    myJFrame.setPreferredSize(new Dimension(600,600));
    SwingBasicGraphRenderer renderer = new SwingBasicGraphRenderer();
    DefaultView view = new DefaultView(viewer, "MyView", renderer);
    view.setPreferredSize(new Dimension(400,400));
    myJFrame.setLayout(new FlowLayout());
    myJFrame.add(view);
    JButton myButton = new JButton("MyButton");
    myButton.addActionListener(e -> System.out.println("Somebody pushed my button."));
    myJFrame.add(myButton);
    myJFrame.pack();
    myJFrame.setVisible(true);
    viewer.enableAutoLayout();
    ViewerPipe vp = viewer.newViewerPipe();
    vp.addViewerListener(new ViewerListener() {
        @Override
        public void viewClosed(String viewName) {
            // dont care
        }

        @Override
        public void buttonPushed(String id) {
            Node n = g.getNode(id);
            String attributes[] = n.getAttributeKeySet().toArray(new String[n.getAttributeKeySet().size()]);

            String attributeToChange = (String) JOptionPane.showInputDialog(null, "Select attibute to modify", "Attribute for " + id, JOptionPane.QUESTION_MESSAGE, null, attributes, attributes[0]);
            String curValue = n.getAttribute(attributeToChange);
            String newValue
                    = JOptionPane.showInputDialog("New Value", curValue);
            n.setAttribute(attributeToChange, newValue);
        }

        @Override
        public void buttonReleased(String id) {
            // don't care
        }
    });
    g.addNode("A");
    g.addNode("B");
    g.addNode("C");

    g.addNode("E");
    g.addNode("F");
    g.addNode("G");

    g.addNode("1");
    g.addNode("2");
    g.addNode("3");

    g.addNode("4");
    g.addNode("5");
    g.addNode("6");



    g.addEdge("AB", "A", "B");
    g.addEdge("AC", "B", "C");
    g.addEdge("BC", "C", "C");

    g.addEdge("EB", "E", "B");
    g.addEdge("FC", "F", "C");
    g.addEdge("GC", "G", "C");

    g.addEdge("1B", "1", "B");
    g.addEdge("2C", "2", "C");
    g.addEdge("3C", "3", "C");

    g.addEdge("4B", "4", "B");
    g.addEdge("5C", "5", "C");
    g.addEdge("6C", "6", "C");




    g.getNode("A").setAttribute("size", "big");
    g.getNode("B").setAttribute("size", "medium");
    g.getNode("C").setAttribute("size", "small");
    g.getNode("A").setAttribute("color", "red");
    g.getNode("B").setAttribute("color", "blue");
    g.getNode("C").setAttribute("color", "green");
    while (true) {
        (view).repaint();
        vp.pump();
    }
}
}

该图:

推荐答案

由于似乎无法预测地移动,我现在能做的最好的事情就是缩小视图,以便一切都可以看到.

Since it seems to move unpredictably the best I can do for now is to zoom out so everything will be in view.

view.getCamera().setViewPercent(5.0);

更新:

将viewrt.getDefaultView()转换为DefaultView似乎比直接调用DefaultVeiw构造函数更好.

It seems to work better to cast viewrt.getDefaultView() to a DefaultView rather than calling the DefaultVeiw constructor directly.

更改

SwingBasicGraphRenderer renderer = new SwingBasicGraphRenderer();
DefaultView view = new DefaultView(viewer, "MyView", renderer);

DefaultView view = (DefaultView) viewer.addDefaultView(false);

这篇关于GraphStream图形未完全呈现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆