Java自动调整为Windows 7字体大小调整

时间:2010-01-11 23:56:44

标签: java windows swing fonts

在Windows 7中,如果您通过控制面板更改字体大小 - >外观和个性化 - >显示“使文字和其他项目更大或更小”,它不仅可以调整菜单大小,还可以调整记事本,写字板,Firefox等应用程序的文本内容大小。

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

2 个答案:

答案 0 :(得分:6)

这有两个部分:

  1. 获取组件,字体等
  2. 获取布局 规模
  3. 对于Swing,第一部分很简单 - 一切都从一个电话开始。

    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    

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

    以下是我放在一起的快速测试应用程序的两个截图,演示了它在Windows 7 @ 96dpi(普通字体大小)和@ 144dpi(150%)

    上的机器外观

    首先是默认字体大小示例:

    Swing app with Windows using normal font sizes

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

    Swing app with Windows using Larger font sizes

    运行之间没有代码更改,只有注销&返回新的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();
                }
            });
        }
    
    }
    

    The Look&感觉提供默认大小,但GUI作者需要在其布局中使用可伸缩单元。它确实需要努力(可扩展的布局也是网页的痛苦!),但它绝对可以实现。

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

    已经很晚了 - 所以现在就是这样。

答案 1 :(得分:0)

这完全取决于您正在使用的GUI工具包。我几乎可以肯定,例如SWT会自动获取新的大小(因为它使用本机小部件)。对于我所知道的人来说,AWT可能也是如此。你能说明你正在使用什么工具包,以及你是否已经确定它还没有做你想要的(以及可能的方式)?