Java JScrollPane内部包含组件的缩放视图

Java JScrollPane内部包含组件的缩放视图,java,swing,zooming,jscrollpane,jviewport,Java,Swing,Zooming,Jscrollpane,Jviewport,是否有任何方法可以缩放视口的视图,但 内部组件的位置不变。背景是我有一个大的jpanel 在jscrollpane中,我只想将视图更改为缩放模式。这个 对象可以拖放到面板内的任何位置,因此保持其xy位置非常重要 这是我当前的缩放代码,我所做的是使用图形2d比例缩放视图。问题是这个职位一团糟。我还想缩小它,使整个面板适合jscrollpane //zoom in draw method using scale g2.translate(zoomX, zoomY); g2.scale(zoomSc

是否有任何方法可以缩放视口的视图,但 内部组件的位置不变。背景是我有一个大的jpanel 在jscrollpane中,我只想将视图更改为缩放模式。这个 对象可以拖放到面板内的任何位置,因此保持其xy位置非常重要

这是我当前的缩放代码,我所做的是使用图形2d比例缩放视图。问题是这个职位一团糟。我还想缩小它,使整个面板适合jscrollpane

//zoom in draw method using scale
g2.translate(zoomX, zoomY);

g2.scale(zoomScale, zoomScale);

g2.translate(-zoomX, -zoomY);
我还想操纵视口。这是我的视口初始化。 2000 x 1000的尺寸是面板,750 x 698的尺寸是我的视口的延伸尺寸。有没有关于如何在不影响组件位置的情况下进行缩放的建议? 也许移动setviewposition是解决方案的一部分

 view = new JViewport();

 view.setViewSize(new Dimension(2000,1000));

 view.setExtentSize(new Dimension(750,698));

 view.setViewPosition(new Point(view.getExtentSize().width/2,view.getExtentSize().height/2));

使用两个增加/减少缩放因子的按钮。在JScrollPane中重写面板的
paintComponent
方法,如下所示

@Override
public void paintComponent(Graphics g)
{
    g.scale(zoomFactor, zoomFactor);
    // Change the size of the panel
    setSize(origWidth * zoomFactor, origHeight * zoomFactor);
    // Re-Layout the panel
    validate();
    super.paintComponent(g);
}

希望它能起作用。

缩放视图能起作用,但组件内部的xy位置仍保持不变。如果单击对象图标,则对象不在该位置。即使缩放,xy位置仍保持不变。仍然不工作,先生,缩放视图工作正常,但我不仅需要缩放图形,还需要缩放可拖动的对象。我认为这与视口或其视图有关。它只会调整视图,而不会调整面板。拖动对象时,必须将鼠标点转换为缩放点。我认为这不仅仅是需要更改的点。因为当我放大它,当我向下滚动它的时候,它的下半部分没有对象。仍然可以在同一位置单击对象,但该位置中没有显示图像。我不知道如何执行此操作。这是我在制作图片查看器时使用的内存代码。在JScollPane中有几次解决了缩放问题,包括居中到所需的点,请在此处搜索,是的,有许多使用scrollpane的缩放解决方案,但这次我希望它像谷歌地图缩放功能一样,jscrollpane中的整个jpanel只在视图中被缩小。其他解决方案仅适用于缩放带有图像的jscrollpane,而不适用于带有可在面板内拖放的组件的jscrollpane。它就像cisco数据包跟踪应用程序zoom,路由器和交换机可以在缩放后进行操作。不知道Google Maps是如何编码的,但我认为thead是关于切换视图的,而不是真正的zoom,当然可能我错了