在Java Swing中缩放JPanel

我有一个现有的Java Swing应用程序。 在应用程序的中间是一个JPanel ,我希望能够zoom in and outJPanel上有许多JComponents (主要是其他JPanelsJLabels )。

此外, mouse位置也需要适当调整 – 因此即使在缩放JPanel之后mouse也需要保持相同。 因此,简单地改变每个componentpaint方法似乎不合理。

编辑:

在此处输入图像描述

好吧,我有点使用MagnifierUI class进行一些小编辑。 然而,我创建的放大面板有错误的鼠标事件 – 即面板缩放, mouseevents不是。

这只是一个问题:

  • 在你的JPanel跟踪表示比例因子的AffineTransform.scale(double,double)参见AffineTransform.scale(double,double)
  • 覆盖JPanelpaint方法:在调用super.paint之前,通过调用Graphics2D.setTransform(AffineTransform)将仿射变换应用于Graphics2D对象(从paint方法的参数super.paint Graphics2D.setTransform(AffineTransform) ,然后调用super.paint
  • 覆盖方法processMouseEventprocessMouseMotionEventprocessMouseWheelEvent ,将仿射变换应用于其鼠标事件参数的坐标( AffineTransform.transform(java.awt.geom.Point2D,java.awt.geom.Point2D) ),之后调用相应的super方法。

希望这可以帮助。

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