Java自动调整到Windows 7的字体大小调整

Windows 7中,如果通过控制面板 – >外观和个性化 – >显示“使文本和其他项目变大或变小”来更改字体大小,则不仅调整菜单大小,而且调整应用程序的文本内容大小记事本,写字板,火狐。

有没有办法让Java自动缩放字体,而不必手动缩放呢?

这有两个部分:

  1. 让你的组件,字体等缩放
  2. 让您的布局规模

对于Swing,第一部分很简单 – 一开始只需一个电话。

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 

在Windows上,这将导致它尊重您的小/大字体(DPI)设置。

这里有两个截图,我从一个快速测试应用程序扔在一起,展示了它在Windows 7 @ 96dpi(正常字体大小)和@ 144dpi(150%)在我的机器上看起来如何,

首先是默认的字体大小样本:

使用正常的字体大小与Windows Swing应用程序

现在更大(150%)的字体大小设置:

与Windows使用较大的字体大小的Swing应用程序

在运行之间没有代码改变,只用新的DPI设置注销并返回。 我设置了一个固定的框架大小,目的是为了证明我的容器尺寸不缩放,这导致我的标签被推下来以适应。

这里是我的源代码 – 剪切并粘贴并自己运行它:

 import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.UIManager; public class SwingFontTest { private static void createGUI() { JButton button = new JButton("my button with Some Text"); JLabel label = new JLabel("and a label"); JPanel panel = new JPanel(new FlowLayout()); panel.add(button); panel.add(label); JFrame frame = new JFrame("Title!"); frame.setContentPane(panel); frame.setSize(300,125); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } SwingUtilities.invokeLater(new Runnable() { @Override public void run() { createGUI(); } }); } } 

外观和感觉提供了默认尺寸,但是由GUI作者在布局中使用可伸缩单元。 这确实需要付出努力(可扩展的布局也是网页的一种痛苦!),但它绝对是可以实现的。

我建议使用FormLayout这样的布局,这样可以用对话框单元(DLU)定义布局,因为这些按DPI进行缩放。 这将使您能够扩大容器规模,并有助于限制行为,如标签由于尺寸的限制而移动到下一行。 如果使用对话单元确定框架的大小,则可以使其看起来相同,只是更大。

现在已经很晚了 – 现在就是这样。

这完全取决于你正在使用的GUI工具包。 我几乎可以肯定,例如SWT会自动拾取新的尺寸(因为它使用原生的小部件)。 AWT可能也是我所知道的。 你能指定你正在使用什么工具包,以及你是否已经确定它没有做你想要的(可能是怎么做的)?