【问题标题】:Java GUI Resolution Independent ScalingJava GUI 分辨率独立缩放
【发布时间】:2010-09-16 07:50:42
【问题描述】:

我正在开发一个大型遗留 Java 应用程序,该应用程序的一个重要功能是根据监视器分辨率自动缩放 GUI 组件。我们正在将运行它的 JVM 从 1.4.2 升级到 1.6,但由于 java.awt.Container.getPreferredSize() 的实现发生了变化,现在缩放被破坏了。

getPreferredSize 用于返回您使用 setPreferredSize() 提供的相同对象(一切也适用于最小/最大尺寸),所以我们要做的是在每个具有特定子类 java.awt.Dimension 的缩放组件上调用 setPRefferedSize ,然后我们将遍历组件层次结构并在分辨率发生变化时更新每个缩放组件。

但是在 Java 1.6 中,getPreferredSize 返回您传递给它的 Dimension 对象的副本,因此它不再是正确的类型,并且没有任何内容被缩放。

我通过将组件类放在类路径上的 JRE 前面,用我自己的实现(感谢开源 JRE)重写了一个解决方案,很快就编写了一个解决方案。然而,这个解决方案显然是不可维护的。

还有其他人知道这个问题的其他解决方案吗,您将如何在 java 1.5/1.6 中实现 GUI 缩放?

【问题讨论】:

    标签: java user-interface scaling


    【解决方案1】:

    听起来他们在 1.6 中比以前更好地保护了组件的内部状态。也许他们在上面运行了FindBugs 并修复了bug

    当我第一次看到这个问题时,我想到了 Java 1.6u10。它包括一个名为Nimbus 的新外观,它通过使用矢量图形绘制所有界面组件来支持高 DPI 显示。

    但是,在稍微慢一点地阅读问题并尝试理解您在说什么之后,我建议您使用将为您管理内部组件大小的布局管理器重写用户界面。我的感觉是,按照您的建议手动管理组件大小确实不是一个好主意。正如jjnguy 建议的那样,您可以使用GridBagLayout。布局管理器还有许多其他选择。如果您正在寻找与 GridBagLayout 不同的东西,有一个 question posted 提供了对每个人最喜欢的布局管理器的调查。

    【讨论】:

    • 很抱歉没有早点接受这个 :),你是对的,团队现在正在努力使用更好的布局管理重新实现大部分界面。谢谢
    【解决方案2】:

    更改布局管理器似乎是不错的解决方案,但在这种情况下,需要对 UI 进行完全重新设计(其中包括数千个组件),因此对于此应用程序而言,这并不是一个真正实用的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多