Zoom JPanel in Java Swing

2022-09-02 14:06:03

我有一个现有的应用程序。在应用程序的中间是一个我希望能够做的单一。上面有很多(主要是其他的和)。Java SwingJPanelzoom in and outJPanelJComponentsJPanelsJLabels

此外,位置也需要适当调整 - 因此即使在缩放后也需要保持不变。因此,简单地改变每种方法似乎都不合理。mousemouseeventsJPanelpaintcomponent

编辑:

enter image description here

好吧,我有点让它使用一些小的编辑工作。但是,我创建的放大面板有错误 - 即面板被缩放,不是。MagnifierUIclassmouseeventsmouseevents


答案 1

这只是一个骗局:

  • 在表示比例因子的仿射变换的跟踪中(请参阅,JPanelAffineTransform.scale(double,double)
  • 在调用之前覆盖您的 : 的方法,通过调用 , 稍后调用将仿射变换应用于您的对象(从方法的参数强制转换)paintJPanelsuper.paintGraphics2DpaintGraphics2D.setTransform(AffineTransform)super.paint
  • 覆盖方法 , 和 ,将仿射变换应用于其鼠标事件参数 () 的坐标,之后调用相应的 -method。processMouseEventprocessMouseMotionEventprocessMouseWheelEventAffineTransform.transform(java.awt.geom.Point2D,java.awt.geom.Point2D)super

希望这有帮助。


答案 2

尝试 SwingUtilities.convertPoint(source, point, destination);