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

Gle*_*enn 10 java windows fonts swing

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

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

Jos*_*non 6

这有两个部分:

  1. 让您的组件,字体等可扩展
  2. 让您的布局扩展

对于Swing,第一部分很简单 - 一切都从一个调用开始.

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Run Code Online (Sandbox Code Playgroud)

在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();
            }
        });
    }

}
Run Code Online (Sandbox Code Playgroud)

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

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

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


Jhe*_*ico 0

这完全取决于您使用的 GUI 工具包。我几乎可以肯定 SWT 会自动选择新的尺寸(因为它使用本机小部件)。据我所知,AWT 也可能是这样。您能否指定您正在使用什么工具包以及您是否确定它尚未执行您想要的操作(以及可能如何执行)?