Java自动适应Windows 7字体大小调整。

10
在Windows 7中,如果您通过控制面板->外观和个性化->显示“使文本和其他项变大或缩小”更改字体大小,则不仅会调整菜单大小,还会调整诸如记事本、WordPad、Firefox之类的应用程序的文本内容大小。
有没有一种方法可以让Java自动缩放字体而无需手动缩放?
2个回答

6

这个问题分两个方面:

  1. 让组件、字体等按比例缩放
  2. 让布局按比例缩放

对于Swing来说,第一个方面很容易- 一切都始于一个调用。

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

在Windows上,这将使其遵守您的小/大字体(DPI)设置。以下是我快速测试应用程序的两个截图,演示了在我的Windows 7机器上以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();
            }
        });
    }

}

外观和感觉提供了默认的大小,但由GUI作者在其布局中使用可缩放单位。这确实需要一定的努力(可缩放的布局在网页上也很麻烦!),但它绝对是可以实现的。

我建议使用像FormLayout这样的布局,它将让您用对话框单位(DLU)定义布局,因为它们与DPI缩放。这将使您的容器按比例缩放,并应有助于限制诸如标签由于大小而移动到下一行之类的行为。如果使用对话框单位确定帧的大小,则可以使其看起来相同,只是更大。

现在就到这里吧,太晚了。


0
这完全取决于您使用的GUI工具包。我几乎可以肯定,例如SWT会自动获取新的大小(因为它使用本地小部件)。至于AWT,我也不确定。您能否指定您正在使用的工具包以及是否已确定它没有实现您想要的功能(可能还有如何实现)?

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