java - 如何让Java Swing应用程序在windows和linux中有一致的字体?

标签 java linux swing fonts windows-xp

我有一个在 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)

确保在创建任何 组件之前更改这些,否则您将获得一些字体正确的字体,而另一些则没有。 Here's a program这将向您显示 UIManager 中的默认属性。以 .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;
    }
}

如果这是一个没有很多组件的新应用程序,我推荐第二种方法。如果它是一个旧的应用程序,到处都有大量的组件生成,第一种方法会更省时,但第二种方法可能会更好。

关于java - 如何让Java Swing应用程序在windows和linux中有一致的字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12202758/

相关文章:

java - spring属性id和name的区别

linux - Debian 不加载 X

c - 理解一个简单的 C 程序生成的汇编代码

linux - 在步骤 CHDIR 生成 "/usr/bin/dotnet": No such file or directory 时失败

java - Swing 祖先监听器 : Don't fire for tab switching?

java - 工作 web3j.replayTransactionsObservable 示例

java - 为什么最后一个线程没有被中断?

java - 什么是系统负载?

java - 使用哪种布局?

java - JButton 保持按下状态