【问题标题】:Zoom in Java Swing application放大 Java Swing 应用程序
【发布时间】:2010-05-31 15:20:29
【问题描述】:

我正在寻找放大 Java Swing 应用程序的方法。这意味着我想通过给定因子调整给定 JPanel 中所有组件的大小,就好像我会截取 UI 并应用“图像缩放”操作一样。必须调整字体大小以及复选框、文本框、光标等的大小。 可以通过对图形对象应用变换来缩放组件:

 protected Graphics getComponentGraphics(Graphics g) {
  Graphics2D g2d=(Graphics2D)g;

  g2d.scale(2, 2);

  return super.getComponentGraphics(g2d);
 }

只要您不关心自更新组件,它就可以工作。如果您的应用程序中有一个文本框,则此方法将停止工作,因为该文本框每秒都会自我更新以显示(闪烁的)光标。并且由于这次它不使用修改后的图形对象,因此组件出现在旧位置。是否有可能永久更改组件图形对象?鼠标单击事件处理程序也存在问题。 另一种可能性是将 JPanel (setPreferredSize) 的所有子组件调整为新大小。这不适用于复选框,因为复选框的显示图片不会改变其大小。 我也想过编写自己的布局管理器,但我认为这不会奏效,因为布局管理器只能更改对象的位置(和大小),但不能放大复选框(参见上一段)。还是我对这个假设有误? 您是否知道如何在不编写自定义组件的情况下实现可缩放的 Swing GUI?我寻找可旋转的用户界面,因为这个问题似乎很熟悉,但我也没有找到任何令人满意的解决方案。

感谢您的帮助, 克里斯

【问题讨论】:

  • 缩放已经渲染的包含抗锯齿字体之类的组件会产生糟糕的结果,特别是如果这些字体使用 RGB 抽取/亚像素抗锯齿。

标签: java user-interface swing zooming scale


【解决方案1】:

你可以试试JXLayer library

其中有几个工具可以帮助您进行缩放。检查示例shown here。我建议您从这个库中阅读有关 TransformUI 的更多信息。从示例来看,它似乎可以帮助解决您的问题。

【讨论】:

  • 感谢您的回复!这似乎是一个非常好的方法。如果有其他人能够为这个主题做出贡献但害怕被标记为“已回答”的问题,我将把这个问题再开放几个小时:-)
  • @Shirky - 接受没有紧急情况,特别是如果有人提供更好的东西;)
  • 库和示例站点已关闭。你能解释一下这个库是如何解决这个问题的吗?
  • @Robert 有人在 github 上上传了实用程序类和示例项目:github.com/edolganov/knowledge-collector/tree/master/ver2/trunk/…。此外,似乎还有一个指向保管箱存档的链接(如 cmets 在另一个问题下所指:stackoverflow.com/questions/14846402/zoom-jpanel-in-java-swing)。希望对您有所帮助。
  • 此外,JXLayer 项目大多作为 JLayer 集成到 Java 7 中。所以这些例子可能与那个兼容。
【解决方案2】:

缩放视图很容易;转换鼠标坐标只是稍微困难一些。这是一个基本的example。我会保留JComponents,尽管开发一个类似的了解几何的ScaledComponent 可能是有意义的。这就是@Gnoupi 关于使用库的建议的用武之地。

【讨论】:

  • 感谢您的回答。我正在寻找一种通用的方法。调整单个组件(您链接到的文章)是另一个问题。
【解决方案3】:

嘿,如果你想像任何其他图像查看器一样缩放图像,你可以试试这个,使用 JPanel 使用 drawImage() 方法绘制图像现在创建一个按钮,当你点击按钮时,增加面板的大小框架看起来好像正在放大查看图像

【讨论】:

    【解决方案4】:

    您可能会发现 Piccolo2D.java API 很有用:http://code.google.com/p/piccolo2d/

    很简单。

    它特别吹捧它的平滑缩放。您基本上制作了一个可以包含各种元素的“画布”,然后只需按住右键单击并前后平移鼠标即可进行缩放。

    我在一个使用它的团队工作:http://sourceforge.net/apps/mediawiki/guitar/index.php?title=WebGuitar#EFG.2FGUI_Visualizer

    您看到的节点本身就是可点击的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多