[英]how to make Java Swing Application has a consistent font in windows and linux?
我有一个用Windows XP开发的Java 7 Swing应用程序。 我使用跨平台外观:
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
当我在linux(Fedora 12)上运行它时。 字体稍宽一些。 因此,由于某些原因,布局发生了变化。
有没有一种方法可以使应用程序使用与jre一起提供的相同字体或类似字体,而不是本地系统? 那么我们可以使其外观和感觉完全相同。
谢谢,
您可以看一下UIManager
。 Swing使用此处的属性(例如Label.font
)来获取默认字体。 因此,您可以执行以下操作:
Font font = // create font
UIManager.put("Label.font", font)
确保在创建任何组件之前更改了这些设置,否则将获得具有正确字体的组件,而其他组件则没有。 这是一个程序 ,它将向您显示UIManager
的默认属性。 任何以.font
结尾的.font
都是您想要的。
另一种方法是创建一个实用程序类,该类将使用您自己的默认值创建组件:
public class MyComponents {
public static final Font LABEL_FONT = // create font
public static JLabel createLabel(String text) {
JLabel label = new JLabel(text);
label.setFont(LABEL_FONT);
return label;
}
}
如果这是一个没有很多组件的新应用程序,我建议使用第二种方法。 如果它是一个旧的应用程序,并且有大量的组件生成散布在各处,那么第一种方法将减少耗时,但是第二种方法可能会更好。
这可能不起作用,但是。 您可以提供与应用程序捆绑在一起的自己的Font并在运行时加载它。
检出JAR文件中的加载字体并创建AWT字体(有效)并注册iText字体(不起作用)作为示例(答案不太正确,但目的是好的)或http://www.java2s。 com / Code / Java / 2D-Graphics-GUI / Loadfontfromttffile.htm
加载后,您可以遍历UIManager的属性,将其中所有名称中的所有键替换为“ .font”。
您最终要面对的问题是OS渲染引擎的差异,包括DPI之类的东西和Font渲染引擎的差异。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.