在Java Swing中缩放JPanel
我有一个现有的Java Swing
应用程序。 在应用程序的中间是一个JPanel
,我希望能够zoom in and out
。 JPanel
上有许多JComponents
(主要是其他JPanels
和JLabels
)。
此外, mouse
位置也需要适当调整 – 因此即使在缩放JPanel
之后mouse
也需要保持相同。 因此,简单地改变每个component
的paint
方法似乎不合理。
编辑:
好吧,我有点使用MagnifierUI
class
进行一些小编辑。 然而,我创建的放大面板有错误的鼠标事件 – 即面板缩放, mouseevents
不是。
这只是一个问题:
- 在你的
JPanel
跟踪表示比例因子的AffineTransform.scale(double,double)
参见AffineTransform.scale(double,double)
, - 覆盖
JPanel
的paint
方法:在调用super.paint
之前,通过调用Graphics2D.setTransform(AffineTransform)
将仿射变换应用于Graphics2D
对象(从paint
方法的参数super.paint
Graphics2D.setTransform(AffineTransform)
,然后调用super.paint
- 覆盖方法
processMouseEvent
,processMouseMotionEvent
和processMouseWheelEvent
,将仿射变换应用于其鼠标事件参数的坐标(AffineTransform.transform(java.awt.geom.Point2D,java.awt.geom.Point2D)
),之后调用相应的super
方法。
希望这可以帮助。
试试SwingUtilities.convertPoint(source,point,destination);