2013-02-13 95 views
18

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

另外mouse位置也需要适当调整 - 所以mouseevents即使在JPanel放大后也需要保持不变。因此,仅仅更改每个componentpaint方法似乎并不合理。

编辑:

enter image description here

OK我有点懂了工作使用MagnifierUIclass一些小修改。然而,我创建的放大面板有错误mouseevents - 即面板缩放,mouseevents不是。

+0

JXLayer可以做到这一点。抓住一个例子(甚至JXLayer本身)现在有问题 – MadProgrammer 2013-02-13 04:33:55

+0

我应该提到,我已经尝试了以下方法1)[Utils4Swing5](http://javadeveloperslife.wordpress.com/2009/07/18/zooming-摆动/),根本不起作用。 2)我也尝试过使用JXLayer和PBTransform的Peit Blok的方法 - 但是Peit Blok似乎已经离开了这个星球,我不能再找到PBTransform所需的jar [链接](http://www.java.net/node/) 700255) – sboy031 2013-02-13 04:34:31

+1

*“任何建议?”*让用户选择屏幕分辨率或操作系统的内置屏幕放大实用程序。如果用户需要它,他们会知道在哪里找到它。 – 2013-02-13 04:44:49

回答

5

这只是一个scetch:

    AffineTransform代表比例因子你 JPanel跟踪
  • (见AffineTransform.scale(double,double)
  • 覆盖你JPanelpaint方法:调用super.paint前申请的仿射转换为Graphics2D对象(通过调用paint方法的参数),请致电Graphics2D.setTransform(AffineTransform),然后致电super.paint
  • 覆盖方法processMouseEvent,processMouseMotionEventprocessMouseWheelEvent,将仿射变换应用到它们的鼠标事件参数的坐标(AffineTransform.transform(java.awt.geom.Point2D,java.awt.geom.Point2D)),之后调用相应的super-方法。

希望这会有所帮助。

1

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