【发布时间】:2012-11-16 01:13:58
【问题描述】:
我有以下三组整数,如下所示:
set0 = {1} //this will always be a singleton set.
set1 = {2, 3, 4, 5}
set2 = {6, 7}
我有一个图,它的边要么从 set1 到 set2 要么从 set2 到 set3,从而形成清晰的树状顶点层次结构。
Set0 -- Set1 -- Set2
为了显示这个树状图,我创建了 DelegateForest 和 TreeLayout
package Test;
import java.util.HashSet;
import java.util.Set;
import javax.swing.JFrame;
import javax.swing.JPanel;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.algorithms.layout.TreeLayout;
import edu.uci.ics.jung.graph.DelegateForest;
import edu.uci.ics.jung.graph.Forest;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.visualization.VisualizationViewer;
import edu.uci.ics.jung.visualization.decorators.ToStringLabeller;
class Main{
public static void main(String[] args){
Set<Integer> set0 = new HashSet<Integer>();
Set<Integer> set1 = new HashSet<Integer>();
Set<Integer> set2 = new HashSet<Integer>();
set0.add(1);
set1.add(2);
set1.add(3);
set1.add(4);
set1.add(5);
set2.add(6);
set2.add(7);
JFrame frame = new JFrame();
frame.add(createGraphPanel(set0, set1, set2));
frame.pack();
frame.setVisible(true);
}
private static JPanel createGraphPanel( Set<Integer> setZero, Set<Integer> firstSet, Set<Integer> secondSet) {
// create a graph
Graph<Integer, String> graph = new DelegateForest<Integer, String>();
Integer vertex1 = setZero.iterator().next();
for (Integer i : firstSet) {
graph.addEdge(vertex1+"-"+i, vertex1, i);
}
Layout<Integer, String> layout = new TreeLayout<Integer, String>((Forest<Integer, String>) graph);
VisualizationViewer<Integer, String> vv = new VisualizationViewer<Integer,String>(layout);
vv.getRenderContext().setVertexLabelTransformer(
new ToStringLabeller<Integer>());
return vv;
}
}
但是,我得到的图表(目前只包含 set1 和 set2)看起来像这样
我想对这个图表做几件事:
- 我希望节点不是从上到下流动,而是从左到右流动。 (类似于旋转 90 度)
- 目前,布局算法确保没有重叠,从而以线性方式分布 set2 的节点。如果 set2 很大,它将超出面板的范围。我不介意重叠,并希望这些节点作为一个集群紧密排列在一起,允许部分重叠。
如何实现这两个要求?
【问题讨论】:
-
请多贴一点代码
-
@durron597 添加了创建
JPanel对象的函数,您可以将其放在 JFrame 或您选择的任何东西上。 -
比 sn-ps 更好的是 SSCCE - 很确定周围的人会愿意玩它:-)
-
@kleopatra 对不起丑陋的代码。之前匆忙添加了它。现在,代码被剥离,但它现在是一个可执行的:) thnks