我正在尝试使用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更改带圆圈的顶点,并扩大它们之间的空间,但是我找不到网上的教程来实现这一点。
答案 0 :(得分:0)
更改节点之间的间距非常容易;只需使用接受TreeLayout
和distx
参数的disty
构造函数即可。
JUNG本身不支持为每个节点提供JButton,尽管您可以做一些修改来启用它。
您要通过对节点使用JButton来解决什么问题?
答案 1 :(得分:0)
以下是一些示例代码,可用于打开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绘制顶点