Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用拾取模式时,如何使用Jung更新布局的大小?_Java_Graph_Visualization_Jung - Fatal编程技术网

Java 使用拾取模式时,如何使用Jung更新布局的大小?

Java 使用拾取模式时,如何使用Jung更新布局的大小?,java,graph,visualization,jung,Java,Graph,Visualization,Jung,我想知道如何更改与jung的VisualizationViewer关联的布局的大小 我解释了目的:实际上,当使用SatelliteVisualizationViewer时,我们可以选择一个节点并将其移动到SatelliteVisualizationViewer未覆盖的区域 我们可以在JUNG发行版的SatelliteViewDemo类中看到这一点。启动演示,选择一个节点并将其移到布局大小之外。节点在VisualizationViewer中显示良好,但在卫星视图中不显示 因此,我尝试在Pickin

我想知道如何更改与jung的VisualizationViewer关联的布局的大小

我解释了目的:实际上,当使用SatelliteVisualizationViewer时,我们可以选择一个节点并将其移动到SatelliteVisualizationViewer未覆盖的区域

我们可以在JUNG发行版的SatelliteViewDemo类中看到这一点。启动演示,选择一个节点并将其移到布局大小之外。节点在VisualizationViewer中显示良好,但在卫星视图中不显示

因此,我尝试在PickingGraphMousePlugin的MouseListener中添加一些代码,特别是在MouseRelease(…)方法中,以便通过包含图形所有节点的矩形的大小来更新布局大小。这样,卫星视图应该更新。 但如何做到这一点呢


编辑:很抱歉没有提供足够的详细信息。事实上,更改布局大小不会更改卫星视图,因此位于布局外部的顶点(在拾取和移动操作后)仍然不被卫星视图覆盖

也许我错过了什么


实际上真正的问题是:如何改变SatelliteVisualizationViewer覆盖的区域

听起来你对如何继续有了一个很好的想法。你粘在哪一块上?更改布局大小?更新可视化?还有别的吗?

听起来你对如何继续有了很好的想法。你粘在哪一块上?更改布局大小?更新可视化?还有什么吗?

我想自动更新卫星视图,相对于启用了拾取支持的VisualizationViewer

我最终采用了另一种解决方案:不自动更新卫星视图,而是使用鼠标按钮2进行平移,使用CTRL+鼠标滚轮进行缩放

这是课程,可能会有帮助…:

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());
        }
    }
}
公共类SatelliteVisualizationViewerMouseControler实现
MouseListener,MouseMotionListener,MouseWheelListener{
专用卫星可视化查看器vv;
私用点拖拽点;
专用双变焦系数=0.1;
公共卫星可视化ViewerMouseControler(
卫星可视化查看器(vv){
这一点。vv=vv;
}
@凌驾
公共无效鼠标标记(鼠标事件e){
如果(拖动点!=null){
Point2D l_drag_point=vv.getRenderContext()
.getMultiLayerTransformer()
.反变换(图层布局、拖曳点);
Point2D l_e_point=vv.getRenderContext()
.getMultiLayerTransformer()
.inverseTransform(Layer.LAYOUT,例如getPoint());
双delta_x=l_e_point.getX()-l_drag_point.getX();
双delta_y=l_e_point.getY()-l_drag_point.getY();
双刻度=vv.getRenderContext().getMultiLayerTransformer()
.getTransformer(Layer.VIEW).getScale();
vv.getRenderContext().getMultiLayerTransformer()
.getTransformer(层布局)
.翻译(delta_x*(1/刻度),delta_y*(1/刻度));
drag_point=e.getPoint();
}
}
@凌驾
public void mouseMoved(MouseEvent e){
}
@凌驾
公共无效mouseClicked(MouseEvent e){
}
@凌驾
公共无效鼠标事件(鼠标事件e){
}
@凌驾
公共无效mouseExited(MouseEvent e){
}
@凌驾
公共无效鼠标按下(MouseEvent e){
如果(例如getButton()==MouseEvent.BUTTON2){
drag_point=e.getPoint();
}
}
@凌驾
公共无效MouseEvent(MouseEvent e){
如果(例如getButton()==MouseEvent.BUTTON2){
拖动点=空;
}
}
@凌驾
已移动公共无效鼠标滚轮(鼠标滚轮事件e){
if(e.getModifiersEx()==MouseEvent.CTRL\u DOWN\u MASK){
vv.getRenderContext()
.getMultiLayerTransformer()
.getTransformer(层布局)
.比例(1+(e.getWheelRotation()*缩放系数),
1+(如getWheelRotation()*缩放系数),
vv.getCenter());
}
}
}

我想将卫星视图自动更新为启用拾取支持的VisualizationViewer

我最终采用了另一种解决方案:不自动更新卫星视图,而是使用鼠标按钮2进行平移,使用CTRL+鼠标滚轮进行缩放

这是课程,可能会有帮助…:

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());
        }
    }
}
公共类SatelliteVisualizationViewerMouseControler实现
MouseListener,MouseMotionListener,MouseWheelListener{
专用卫星可视化查看器vv;
私用点拖拽点;
专用双变焦系数=0.1;
公共卫星可视化ViewerMouseControler(
卫星可视化查看器(vv){
这一点。vv=vv;
}
@凌驾
公共无效鼠标标记(鼠标事件e){
如果(拖动点!=null){
Point2D l_drag_point=vv.getRenderContext()
.getMultiLayerTransformer()
.反变换(图层布局、拖曳点);
Point2D l_e_point=vv.getRenderContext()
.getMultiLayerTransformer()
.inverseTransform(Layer.LAYOUT,例如getPoint());
双delta_x=l_e_point.getX()-l_drag_point.getX();
双delta_y=l_e_point.getY()-l_drag_point.getY();
双刻度=vv.getRenderContext().getMultiLayerTransformer()
.getTransformer(Layer.VIEW).getScale();
vv.getRenderContext().getMultiLayerTransformer()
.getTransformer(层布局)
.翻译(delta_x*(1/刻度),delta_y*(1/刻度));
drag_point=e.getPoint();
}
}
@凌驾
public void mouseMoved(MouseEvent e){
}
@凌驾
普布利