放大 Java Swing 应用程序

2022-09-04 19:46:21

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

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

  g2d.scale(2, 2);

  return super.getComponentGraphics(g2d);
 }

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

谢谢你的帮助,克里斯


答案 1

你可以试试 JXLayer 库

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


答案 2

缩放视图非常简单;变换鼠标坐标只是稍微困难一些。下面是一个基本示例。我会把s排除在外,尽管开发一个了解几何的类似物可能是有意义的。这就是@Gnoupi关于使用库的建议的用武之地。JComponentScaledComponent