放大Java Swing应用程序

时间:2010-05-31 15:20:30

标签: java user-interface swing zoom scale

我正在寻找放大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?我寻找可旋转的用户界面,因为问题似乎很熟悉,但我也没有找到任何令人满意的解决方案来解决这个问题。

感谢您的帮助, 克里斯

4 个答案:

答案 0 :(得分:9)

您可以尝试JXLayer library

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

答案 1 :(得分:7)

缩放视图很容易;转换鼠标坐标只是稍微困难一些。这是一个小学example。我会保持JComponent,尽管开发一个知道几何的类似ScaledComponent可能是有意义的。这就是@ Gnoupi建议使用图书馆的地方。

答案 2 :(得分:2)

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

中查看图像

答案 3 :(得分:2)

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

这很简单。

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

我曾在一个团队中使用它来创建它:http://sourceforge.net/apps/mediawiki/guitar/index.php?title=WebGuitar#EFG.2FGUI_Visualizer

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