Java自动调整到Windows7字体大小调整

Java自动调整到Windows7字体大小调整,java,windows,swing,fonts,Java,Windows,Swing,Fonts,在Windows 7中,如果您通过控制面板->外观和个性化->显示“使文本和其他项目变大或变小”更改字体大小,它不仅会调整菜单大小,还会调整记事本、写字板、Firefox等应用程序的文本内容大小 有没有办法让Java自动缩放字体,而不必手动缩放字体?这完全取决于您使用的GUI工具包。例如,我几乎可以肯定SWT会自动选择新的大小(因为它使用本机小部件)。据我所知,AWT也可以。您是否可以指定您正在使用的工具包,以及您是否已经确定它尚未完成您想要的任务(以及可能的方式)?这有两个部分: 获取组件、字

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


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

这完全取决于您使用的GUI工具包。例如,我几乎可以肯定SWT会自动选择新的大小(因为它使用本机小部件)。据我所知,AWT也可以。您是否可以指定您正在使用的工具包,以及您是否已经确定它尚未完成您想要的任务(以及可能的方式)?

这有两个部分:

  • 获取组件、字体等 比例尺
  • 让您的布局 鳞片
  • 对于Swing来说,第一部分很简单——它从一个调用开始

    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    
    在Windows上,这将使其尊重您的小/大字体(DPI)设置

    下面是我拼凑的一个快速测试应用程序的两个屏幕截图,展示了它在Windows7@96dpi(正常字体大小)和@144dpi(150%)下在我的机器上的外观

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

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

    运行之间没有代码更改,只使用新的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();
                }
            });
        }
    
    }
    
    Look&Feel提供了默认的大小设置,但在布局中使用可伸缩单元取决于GUI作者。这的确需要付出努力(可伸缩的布局在网页上也是一件痛苦的事情!),但这绝对是可以实现的

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

    天晚了,所以现在就到这里