Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 显示预使用节点字段_Java_Graph Visualization_Prefuse - Fatal编程技术网

Java 显示预使用节点字段

Java 显示预使用节点字段,java,graph-visualization,prefuse,Java,Graph Visualization,Prefuse,我想显示一个简单的图形,其中节点ID位于使用的节点中,但这似乎比听起来更复杂 Graph g = new Graph(); for (int i = 0; i < 3; ++i) { Node n1 = g.addNode(); n1.setInt("label", 1); // I am trying to add a field in a node Node n2 = g.addNode(); Node n3 = g.addNode(); g.a

我想显示一个简单的图形,其中节点ID位于使用的节点中,但这似乎比听起来更复杂

Graph g = new Graph();
for (int i = 0; i < 3; ++i) {
    Node n1 = g.addNode();
    n1.setInt("label", 1); // I am trying to add a field in a node
    Node n2 = g.addNode();
    Node n3 = g.addNode();
    g.addEdge(n1, n2);
    g.addEdge(n1, n3);
    g.addEdge(n2, n3);
}
g.addEdge(0, 3);
g.addEdge(3, 6);
g.addEdge(6, 0);

// add visual data groups
VisualGraph vg = m_vis.addGraph(GRAPH, g);
m_vis.setInteractive(EDGES, null, false);
m_vis.setValue(NODES, null, VisualItem.SHAPE, new Integer(Constants.SHAPE_STAR));

我不知道如何使用节点中的字段。我试着读了这本书,但没能弄明白

您可能正在寻找
LabelRenderer
。在下文中,
LabelRenderer
的构造方式可以渲染具有标签
GraphLib.label
(定义为
“label”
)的节点:

组成
图形的节点通过
setString()
使用相同的键
GraphLib.LABEL
给出文本。例如,添加到
GraphLib.getDiamondTree()
返回的
Graph
中的根
节点
被分配键
GraphLib.LABEL
和值
“0,0”

稍后,当
可视化运行时,渲染器尝试使用
GraphLib.LABEL
字段中的文本


答案有点晚了,我自己想出来了,但还是谢谢。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
    at java.util.ArrayList.elementData(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at prefuse.data.Table.getColumn(Table.java:457)
    at prefuse.data.Table.setInt(Table.java:1032)
    at prefuse.data.tuple.TableTuple.setInt(TableTuple.java:215)
    at prefuse.demos.AggregateDemo.initDataGroups(AggregateDemo.java:141)
    at prefuse.demos.AggregateDemo.<init>(AggregateDemo.java:72)
    at prefuse.demos.AggregateDemo.demo(AggregateDemo.java:182)
    at prefuse.demos.AggregateDemo.main(AggregateDemo.java:176)
LabelRenderer r = new LabelRenderer(GraphLib.LABEL);
Node r = t.addRoot();
r.setString(LABEL, "0,0");
import java.awt.Dimension;
import javax.swing.JFrame;
import prefuse.Display;
import prefuse.Visualization;
import prefuse.action.ActionList;
import prefuse.action.RepaintAction;
import prefuse.action.assignment.ColorAction;
import prefuse.action.layout.graph.ForceDirectedLayout;
import prefuse.activity.Activity;
import prefuse.controls.DragControl;
import prefuse.controls.PanControl;
import prefuse.controls.ZoomControl;
import prefuse.data.Graph;
import prefuse.render.DefaultRendererFactory;
import prefuse.render.LabelRenderer;
import prefuse.util.ColorLib;
import prefuse.util.GraphLib;
import prefuse.visual.VisualItem;

/** @see https://stackoverflow.com/a/44274886/230513 */
public class Example {

    private static final int W = 640;
    private static final int H = 480;

    public static void main(String[] argv) {

        // -- 1. create the data ------------------------------------------------
        Graph graph = GraphLib.getDiamondTree(3, 2, 1);

        // -- 2. the visualization --------------------------------------------
        // add the graph to the visualization as the data group "graph"
        // nodes and edges are accessible as "graph.nodes" and "graph.edges"
        Visualization vis = new Visualization();
        vis.add("graph", graph);
        vis.setInteractive("graph.edges", null, false);

        // -- 3. the renderers and renderer factory ---------------------------
        LabelRenderer r = new LabelRenderer(GraphLib.LABEL);
        r.setRoundedCorner(8, 8); // round the corners

        // create a new default renderer factory
        // return our name label renderer as the default for all non-EdgeItems
        // includes straight line edges for EdgeItems by default
        vis.setRendererFactory(new DefaultRendererFactory(r));

        // -- 4. the processing actions ---------------------------------------
        ColorAction fill = new ColorAction("graph.nodes",
            VisualItem.FILLCOLOR, ColorLib.rgb(200, 200, 255));
        // use black for node text
        ColorAction text = new ColorAction("graph.nodes",
            VisualItem.TEXTCOLOR, ColorLib.gray(0));
        // use light grey for edges
        ColorAction edges = new ColorAction("graph.edges",
            VisualItem.STROKECOLOR, ColorLib.gray(200));

        // create an action list containing all color assignments
        ActionList color = new ActionList();
        color.add(fill);
        color.add(text);
        color.add(edges);

        // create an action list with an animated layout
        ActionList layout = new ActionList(Activity.INFINITY);
        layout.add(new ForceDirectedLayout("graph"));
        layout.add(new RepaintAction());

        // add the actions to the visualization
        vis.putAction("color", color);
        vis.putAction("layout", layout);

        // -- 5. the display and interactive controls -------------------------
        Display d = new Display(vis) {

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(W, H);
            }
        };
        d.setSize(W, H); // set display size
        d.pan(W / 2, H / 2); // pan to center
        d.addControlListener(new DragControl());
        d.addControlListener(new PanControl());
        d.addControlListener(new ZoomControl());

        // -- 6. launch the visualization -------------------------------------
        JFrame frame = new JFrame("prefuse label example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(d);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true); // show the window

        vis.run("color");
        vis.run("layout");
    }
}