放大Java Swing应用程序

Shi*_*rky 13 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);
 }
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助,克里斯

Gno*_*upi 9

你可以尝试一下JXLayer库.

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


tra*_*god 7

缩放视图很容易; 转换鼠标坐标只是稍微困难一些.这是一个基本的例子.我会坚持JComponent下去,尽管开发一个ScaledComponent了解几何的类似物可能是有意义的.这就是@ Gnoupi建议使用图书馆的地方.