放大的JPanel中的Java Swing(Zoom JPanel in Java Swing)

2019-08-16 22:26发布

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

此外mouse位置需要进行适当的调整,以及-所以mouseevents需要保持相同的偶数后JPanel已被放大。 这样简单地改变paint的每个方法的component似乎并不可行。

编辑:

好吧,我种了它的工作使用MagnifierUI class的一些小修改。 然而,放大板创建有错误的mouseevents -即面板进行缩放, mouseevents都没有。

Answer 1:

这仅仅是一个scetch:

  • 在您JPanel密切跟踪的AffineTransform代表比例因子(见AffineTransform.scale(double,double)
  • 覆盖paint的方法JPanel :之前调用super.paint仿射变换应用到您Graphics2D对象(从的参数投paint通过调用方法) Graphics2D.setTransform(AffineTransform)调用super.paint之后
  • 重载的方法processMouseEventprocessMouseMotionEventprocessMouseWheelEvent ,仿射变换应用到他们的鼠标事件参数(坐标AffineTransform.transform(java.awt.geom.Point2D,java.awt.geom.Point2D) ),调用相应的super事后-方法。

希望这可以帮助。



Answer 2:

尝试SwingUtilities.convertPoint(源,点,目的地);



文章来源: Zoom JPanel in Java Swing