繁体   English   中英

如何使Java Swing应用程序在Windows和Linux中具有一致的字体?

[英]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渲染引擎的差异。

目前尚不清楚这是字体问题还是布局问题。 自然,一个scscce可以帮助说明您认为是问题所在。 相比之下,此示例说明了如何调整布局以适应不同平台上的默认字体系列。

当您使用的跨平台L&F ,你可能要关闭字体加粗,如图所示这里 某些平台不使用实际的粗体字体,而是从纯字体派生粗体样式,通常会产生混合结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM