我正在尝试使用JUNG库可视化树形图。
我使用的代码是:
JPanel base = new JPanel();
Graph<String, String> grafo = OntologyGraph.getGraph(ontology);
Layout<String, String> layout = new TreeLayout<String, String>((Forest<String, String>) grafo);
VisualizationViewer<String, String> vv = new VisualizationViewer<String, String>(layout);
vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller<String>());
vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller<String>());
vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);
final DefaultModalGraphMouse<String, Number> graphMouse3 = new DefaultModalGraphMouse<>();
vv.setGraphMouse(graphMouse3);
graphMouse3.setMode(DefaultModalGraphMouse.Mode.PICKING);
base.add(vv);
return base;
现在我想用标记的JButton更改带圆圈的顶点并扩大它们之间的空间,但我找不到网上的教程来实现这一点。
改变节点之间的间距很容易;只需使用接受TreeLayout
和distx
参数的disty
构造函数。
为每个节点提供JButton并不是JUNG原生支持的东西,尽管你可以做一些黑客来启用它。
使用JButtons进行节点尝试解决的问题是什么?
下面是一些示例代码,您可以使用这些代码打开JFrame,其中包含有关所单击节点的信息(当您处于拾取模式时)。如果你想让它响应节点点击,即使你处于转换模式,你也必须稍微更改graphmouseplugins,以便在转换模式下不删除PickingGraphMousePlugin。
vv.getRenderContext().getPickedVertexState().addItemListener(new ItemListener(){
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
JFrame frame = new JFrame("Vertex "+e.getItem()+" picked");
frame.getContentPane().add(new JButton("hello from "+e.getItem()));
frame.setSize(new Dimension(200,100));
frame.setLocation(200, 200);
frame.setVisible(true);
}
}
});
如果您希望顶点看起来更像矩形按钮,则VertexLableAsShapeDemo可能会有所帮助。该演示使用JLabel绘制顶点