【问题标题】:Zoom JPanel in Java Swing在 Java Swing 中缩放 JPanel
【发布时间】:2013-01-28 13:50:58
【问题描述】:

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

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

编辑:

好的,我使用 MagnifierUI class 进行了一些小的编辑,使其工作正常。但是我创建的放大面板有错误的mouseevents - 即面板已缩放,mouseevents 没有。

【问题讨论】:

  • JXLayer 可以做到这一点。现在获取示例(甚至 JXLayer 本身)是有问题的
  • 我应该提一下,我尝试了以下方法 1) Utils4Swing5 这根本不起作用。 2)我也尝试过使用 JXLayer 和 PBTransform 的 Peit Blok 方法 - 但是 Peit Blok 似乎已经离开了地球,我再也找不到 PBTransform link 所需的罐子
  • “有什么建议吗?” 让用户选择屏幕分辨率或操作系统的内置屏幕放大实用程序。如果用户需要它,他们会知道在哪里可以找到它。
  • @MadProgrammer 是的,我尝试过使用 JXLayer(和 JLayer),但 TransformUI 似乎是唯一可以与 JXLayer 一起使用来缩放的 UI 类,而且奇怪的是它在互联网上不存在(如 Peit Blok,它的开发商,似乎已经关门了)
  • 我已经把它打包了here。查看 PB 的 Jar 中的 TestWrapped 演示...

标签: java swing user-interface jpanel zooming


【解决方案1】:

这只是一个缩影:

  • 在您的JPanel 中跟踪代表比例因子的AffineTransform(请参阅AffineTransform.scale(double,double)
  • 覆盖JPanelpaint 方法:在调用super.paint 之前,通过调用Graphics2D.setTransform(AffineTransform) 将仿射变换应用于Graphics2D 对象(从paint 方法的参数转换),调用@ 987654330@之后
  • 覆盖方法processMouseEventprocessMouseMotionEventprocessMouseWheelEvent,将仿射变换应用到它们的鼠标事件参数(AffineTransform.transform(java.awt.geom.Point2D,java.awt.geom.Point2D))的坐标上,然后调用各自的super方法。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-29
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多