在Windows 7中,如果您通过控制面板更改字体大小 - >外观和个性化 - >显示“使文字和其他项目更大或更小”,它不仅可以调整菜单大小,还可以调整记事本,写字板,Firefox等应用程序的文本内容大小。
有没有办法让Java自动缩放字体而不必手动缩放它?
答案 0 :(得分:6)
这有两个部分:
对于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();
}
});
}
}
The Look&感觉提供默认大小,但GUI作者需要在其布局中使用可伸缩单元。它确实需要努力(可扩展的布局也是网页的痛苦!),但它绝对可以实现。
我建议使用像FormLayout这样的布局,让您可以在对话单元(DLU)中定义布局,因为它们可以使用DPI进行缩放。这将使您能够使容器缩小尺寸,并且应该有助于限制行为,例如由于尺寸调整而移动到下一行的标签。如果使用对话框单元确定框架的大小,则可以使其看起来相同,只是更大。
已经很晚了 - 所以现在就是这样。
答案 1 :(得分:0)
这完全取决于您正在使用的GUI工具包。我几乎可以肯定,例如SWT会自动获取新的大小(因为它使用本机小部件)。对于我所知道的人来说,AWT可能也是如此。你能说明你正在使用什么工具包,以及你是否已经确定它还没有做你想要的(以及可能的方式)?