Java Swing:系统范围组件缩放?

3

有没有一种方法可以通过单个因素来扩展应用程序中的所有Swing组件?我有一个现有的Swing应用程序,我想以双倍大小显示所有组件。这可能吗?

编辑:

我正在将Java Swing应用程序移植到Sugar(OLPC XO Graphics Environment)。我没有可访问性功能。该机器在7.5英寸显示器上只有1200x900的分辨率。因此,组件非常小且不可读。


2
“这可行吗?”更好的问题是“这样做有什么意义?”如果用户需要您应用程序的组件大小加倍,他们可以使用操作系统内置的辅助功能来实现。该功能免费且独立于您的应用程序。 - Andrew Thompson
没有全局缩放因子。以目前的形式,无法回答这个问题。请编辑您的问题,包括您想要实现的细节。 - trashgod
@AndrewThompson 请检查编辑。那是您的观点。 - Butaca
我确信这是 LayoutManagers 存在的最重要原因,因为默认情况下没有更简单的方式。 - mKorbel
@Butaca:这个目标平台有哪些外观实现可用? - trashgod
有这些可用的 L&F:Metal、Nimbus、CDE/Motif 和 GTK+。 - Butaca
4个回答

7
如果您放置
System.setProperty("sun.java2d.uiScale","2")

在你的主方法开头,使用下列代码可以将整个应用程序放大2倍。其他比例因子也是可能的。在Windows 7和带有KDE的Linux上(都采用系统外观),我们已经成功地尝试过这种方法,并且Windows接受分数缩放因子,而KDE不接受。如果您不想修改源代码,则可以通过jvm的命令行选项实现相同的效果:
java -Dsun.java2d.uiScale=2 -jar myApp.jar

那个sun.java2d.uiScale属性似乎有点晚出现了 :) 不管怎样,谢谢您的答案,我不知道这个 :) - Butaca
该属性在Java 8中不可用,但在Java 11中可用,因此我猜它是最近引入的。 - toolforger

4

不幸的是,Swing中没有这样的标准功能。

应用程序中每个组件的大小都由其容器的布局和组件的首选/最小大小(由其UI提供)确定。

因此,我认为最好的方法是修改标准UI,以便它们提供额外的首选大小(在您的情况下加倍)。但是,您将需要分别为某种类型的每个组件(按钮/复选框/表格/树/滚动条等)进行操作。此外,您无法更改系统UI,只能扩展一些跨平台的外观和感觉,例如Metal LaF,在使用本地外观和感觉时完全没有用处。

您可以更改一些默认的L&F属性,例如字体:

UIManager.put ( "Button.font", new FontUIResource ( new Font ( "Arial", Font.BOLD, 20 ) ) );

这个特定案例仅更改按钮字体。在任何LookAndFeel类中(例如BasicLookAndFeel),您还可以找到许多其他组件的字体属性。

更改默认字体大小是可能的吗?谢谢您的回答。 - Butaca
使用UIManager肯定可以修改默认的外观属性。 - trashgod
@trashgod 你可以通过UIManager修改外观属性,但其中一些属性不会被正确更新(即使在完整的组件树更新后,因为其中一些属性在第一次调用后被缓存)。此外,只有少数属性会影响组件大小,它们并不取决于组件本身(例如按钮/文本字段边距),因此您不能将它们分配为使其加倍组件大小的方式。 - Mikle Garin
1
@Butaca 是的,你可以通过默认的外观属性修改默认组件的字体大小。请再次查看我的答案以获取代码示例。 - Mikle Garin
@MikleGarin: 说得好。由于楼主提出了可读性的要求,我们可以考虑字体大小,就像你展示的那样。该组件应该允许采用相应的首选大小。+1 - trashgod

4
  • 使用Nimbus Look and Feel可以对Swing JComponents进行缩放。

  • 修改Nimbus L&F的ColorInsetsBounds等内容非常复杂,但在没有任何问题的情况下,可以以简单的形式进行修改。


啊,也许像这样的东西(http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/size.html)? - trashgod
@mKorbel 谢谢,但是组件不够大。请查看我的编辑。 - Butaca

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接