我想知道如何使用jung更改与VisualizationViewer关联的布局的大小?
我解释了目的:实际上,当使用SatelliteVisualizationViewer时,我们可以选择一个节点并将其移动到一个未被SatelliteVisualisationViewer覆盖的区域。
我们可以在JUNG发行版的SatelliteViewDemo类中看到这一点。启动演示,选择一个节点并将其移出布局大小。该节点在VisualizationViewer中很好地显示,但不在卫星视图中显示。
因此,我尝试在PickingGraphMousePlugin的MouseListener中添加一些代码,特别是在mouseReleased(...)方法中,以便通过包含图形的所有节点的矩形的大小来更新布局大小。这样做,应该更新SatelliteView。 但是怎么做呢?
修改:抱歉没有足够的详细信息。实际上,更改布局大小不会更改SatelliteView,因此位于布局外部的顶点(拾取和移动操作之后)仍未被SatelliteView覆盖。
也许我错过了一些东西......
实际上真正的问题是:如何更改SatelliteVisualizationViewer所涵盖的区域? !!!
答案 0 :(得分:0)
听起来你对如何继续进行了很好的了解。你坚持了什么?改变布局大小?更新可视化?还有别的吗?
答案 1 :(得分:0)
我希望在启用了拣配支持的情况下,相对于VisualizationViewer自动更新卫星视图。
我终于采用了另一种解决方案:不使用鼠标按钮2自动更新卫星视图,使用CTRL + Mouse_Wheel进行缩放。
这是课程,可能会有所帮助......:
public class SatelliteVisualizationViewerMouseControler implements
MouseListener, MouseMotionListener, MouseWheelListener {
private SatelliteVisualizationViewer<SVertex, PEdge> vv;
private Point drag_point;
private double zoom_factor = 0.1;
public SatelliteVisualizationViewerMouseControler(
SatelliteVisualizationViewer<SVertex, PEdge> vv) {
this.vv = vv;
}
@Override
public void mouseDragged(MouseEvent e) {
if (drag_point != null) {
Point2D l_drag_point = vv.getRenderContext()
.getMultiLayerTransformer()
.inverseTransform(Layer.LAYOUT, drag_point);
Point2D l_e_point = vv.getRenderContext()
.getMultiLayerTransformer()
.inverseTransform(Layer.LAYOUT, e.getPoint());
double delta_x = l_e_point.getX() - l_drag_point.getX();
double delta_y = l_e_point.getY() - l_drag_point.getY();
double scale = vv.getRenderContext().getMultiLayerTransformer()
.getTransformer(Layer.VIEW).getScale();
vv.getRenderContext().getMultiLayerTransformer()
.getTransformer(Layer.LAYOUT)
.translate(delta_x * (1 / scale), delta_y * (1 / scale));
drag_point = e.getPoint();
}
}
@Override
public void mouseMoved(MouseEvent e) {
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON2) {
drag_point = e.getPoint();
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON2) {
drag_point = null;
}
}
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
if (e.getModifiersEx() == MouseEvent.CTRL_DOWN_MASK) {
vv.getRenderContext()
.getMultiLayerTransformer()
.getTransformer(Layer.LAYOUT)
.scale(1 + (e.getWheelRotation() * zoom_factor),
1 + (e.getWheelRotation() * zoom_factor),
vv.getCenter());
}
}
}