首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用GraphStream在swing中绘制图形呢?

如何用GraphStream在swing中绘制图形呢?
EN

Stack Overflow用户
提问于 2015-01-29 16:38:28
回答 1查看 4.7K关注 0票数 3

我正在尝试实现教程图在swing中的绘图,但是失败了。

守则如下:

包装tests.graphstream;

代码语言:javascript
复制
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import org.graphstream.graph.Graph;
import org.graphstream.graph.implementations.SingleGraph;
import org.graphstream.ui.swingViewer.View;
import org.graphstream.ui.swingViewer.Viewer;

public class Tutorial1_01
{
    private static Graph graph = new SingleGraph("Tutorial 1");

    public static class MyFrame extends JFrame
    {
        private static final long serialVersionUID = 8394236698316485656L;

        //private Graph graph = new MultiGraph("embedded");
        //private Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
        private Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_SWING_THREAD);
        private View view = viewer.addDefaultView(false);

        public MyFrame() {
             setLayout(new BorderLayout());
             add(view, BorderLayout.CENTER);
             setDefaultCloseOperation(EXIT_ON_CLOSE);
        }
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                MyFrame frame = new MyFrame();
                frame.setSize(320, 240);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);

                graph.addNode("A");
                graph.addNode("B");
                graph.addNode("C");
                graph.addEdge("AB", "A", "B");
                graph.addEdge("BC", "B", "C");
                graph.addEdge("CA", "C", "A");

                graph.addAttribute("ui.quality");
                graph.addAttribute("ui.antialias");
            }
        });
    }
}

它画的是:

如果拖动节点,则转到:

如何获得结果,接近graph.display()

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-30 11:20:50

这是一个副作用,因为默认情况下节点没有xy坐标。

为了防止这种情况发生,你应该:

  • autolayout激活viewer对象上的viewer.enableAutoLayout();
  • 或者自己为每个节点指定一些xy属性。

奥托莱奥特

代码语言:javascript
复制
// ...
public MyFrame() {
     setLayout(new BorderLayout());
     add(view, BorderLayout.CENTER);
     setDefaultCloseOperation(EXIT_ON_CLOSE);
     // Activate autolayout here : 
     viewer.enableAutoLayout();
}
// ...

具有节点属性

代码语言:javascript
复制
// In main() ...
Node a = graph.addNode("A");
a.addAttribute("xy", 0, 0);
Node b = graph.addNode("B");
b.addAttribute("xy", 10, 0);
Node c = graph.addNode("C");
c.addAttribute("xy", 10, 10);
// ...
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28219903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档