gpt4 book ai didi

java - 如何使 JUNG 中的节点子集出现在一条直线上?

转载 作者:行者123 更新时间:2023-11-29 09:08:52 25 4
gpt4 key购买 nike

我正在尝试在 JUNG 中构建一个图表,使图表中的某些节点以不同的方式显示和布局。

这是我目前的代码:

package example.ordering;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;

import org.apache.commons.collections15.Transformer;
import org.apache.commons.collections15.functors.ChainedTransformer;

import edu.uci.ics.jung.algorithms.layout.FRLayout;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.SparseGraph;
import edu.uci.ics.jung.visualization.VisualizationViewer;
import edu.uci.ics.jung.visualization.renderers.VertexLabelAsShapeRenderer;

public class Main {

public static void main(String[] args) {

final JFrame frame = new JFrame();

frame.add(createGraph());
frame.setLocationRelativeTo(null);

frame.pack();

EventQueue.invokeLater(new Runnable() {

public void run() {
frame.setVisible(true);
}
});
}

private static JPanel createGraph() {

// TODO fill in the code to create a graph with nodes and order them.
Graph<GraphNode, String> g1 = new SparseGraph<GraphNode, String>();

GraphNode A = new GraphNode("A", "u");
GraphNode B = new GraphNode("B", "u");
GraphNode a = new GraphNode("a", "l");
GraphNode b = new GraphNode("b", "l");

g1.addEdge("AB", A, B);
// g1.addEdge("CD", "C", "D");

g1.addEdge("Aa", A, a);
g1.addEdge("Bb", B, b);

FRLayout<GraphNode, String> layout = new FRLayout<GraphNode, String>(g1);
VisualizationViewer<GraphNode, String> vv = new VisualizationViewer<GraphNode, String>(
layout);

VertexLabelAsShapeRenderer<GraphNode, String> vlasr = new VertexLabelAsShapeRenderer<GraphNode, String>(
vv.getRenderContext());

vv.getRenderContext().setVertexShapeTransformer(vlasr);
vv.getRenderContext().setVertexLabelTransformer(
new ChainedTransformer<GraphNode, String>(
new Transformer[] { new MyLabeller() }));
vv.getRenderer().setVertexLabelRenderer(vlasr);

return vv;
}

}

class GraphNode {
public String value;
public String type;

public GraphNode(String value, String type) {
this.value = value;
this.type = type;
}

@Override
public String toString() {
return value;
}

}

class MyLabeller implements Transformer<GraphNode, String> {

public String transform(GraphNode arg0) {
if (arg0.type.equals("u")) {
return arg0.value;
} else {
return "";
}
}

}

enter image description here

现在 AB 显示为带标签的正确矩形,而小写的 ab 显示为小没有标签的小破折号。

我想要的是小案例节点(类型为“l”)都出现在按字母顺序排序的同一级别。

最佳答案

关于java - 如何使 JUNG 中的节点子集出现在一条直线上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13434616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com