Java 使用拾取模式时,如何使用Jung更新布局的大小?
我想知道如何更改与jung的VisualizationViewer关联的布局的大小 我解释了目的:实际上,当使用SatelliteVisualizationViewer时,我们可以选择一个节点并将其移动到SatelliteVisualizationViewer未覆盖的区域 我们可以在JUNG发行版的SatelliteViewDemo类中看到这一点。启动演示,选择一个节点并将其移到布局大小之外。节点在VisualizationViewer中显示良好,但在卫星视图中不显示 因此,我尝试在PickingGraphMousePlugin的MouseListener中添加一些代码,特别是在MouseRelease(…)方法中,以便通过包含图形所有节点的矩形的大小来更新布局大小。这样,卫星视图应该更新。 但如何做到这一点呢Java 使用拾取模式时,如何使用Jung更新布局的大小?,java,graph,visualization,jung,Java,Graph,Visualization,Jung,我想知道如何更改与jung的VisualizationViewer关联的布局的大小 我解释了目的:实际上,当使用SatelliteVisualizationViewer时,我们可以选择一个节点并将其移动到SatelliteVisualizationViewer未覆盖的区域 我们可以在JUNG发行版的SatelliteViewDemo类中看到这一点。启动演示,选择一个节点并将其移到布局大小之外。节点在VisualizationViewer中显示良好,但在卫星视图中不显示 因此,我尝试在Pickin
编辑:很抱歉没有提供足够的详细信息。事实上,更改布局大小不会更改卫星视图,因此位于布局外部的顶点(在拾取和移动操作后)仍然不被卫星视图覆盖 也许我错过了什么
实际上真正的问题是:如何改变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){
}
@凌驾
普布利