gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:41:53 26 4
gpt4 key购买 nike

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

有没有办法让 Java 自动缩放字体而无需手动缩放?

最佳答案

这有两个部分:

  1. 获取您的组件、字体等规模化
  2. 让你的布局规模

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

}

Look & Feel 提供了默认大小,但是 GUI 作者可以在他们的布局中使用可缩放的单元。它确实需要付出努力(可扩展布局在网页上也是一种痛苦!),但它绝对是可以实现的。

我建议使用类似 FormLayout 的布局这将使您可以在 Dialog Units (DLU) 中定义布局,因为这些布局与 DPI 成比例。这将使您能够使容器按比例缩放,并且应该有助于限制标签因尺寸调整而移动到下一行等行为。如果框架的大小是使用对话单元确定的,那么它可以看起来一样,只是更大了。

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

关于Java自动适应Windows 7字体大小调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2045811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com