Java 获取系统默认字体

Java 获取系统默认字体,java,fonts,Java,Fonts,有没有办法在Java中获取系统默认字体名称?默认字体可能与操作系统不同。因此,如果我们使用Arial字体,并且jar在Linux中运行,而没有安装Arial字体,则可能会产生问题。我认为没有办法检索系统默认字体(例如,在Swing/AWT中,字体通常与当前LAF和组件相关联),但是,如果您担心字体兼容性,您可以对照所有系统字体检查您使用的字体: GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment(); F

有没有办法在Java中获取系统默认字体名称?默认字体可能与操作系统不同。因此,如果我们使用Arial字体,并且jar在Linux中运行,而没有安装Arial字体,则可能会产生问题。

我认为没有办法检索系统默认字体(例如,在Swing/AWT中,字体通常与当前LAF和组件相关联),但是,如果您担心字体兼容性,您可以对照所有系统字体检查您使用的字体:

GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
Font[] allFonts = e.getAllFonts();
如果不存在,则进行“故障转移”选择。

使用定义的字体,如
衬线
/
无衬线
等。

getFont()返回当前字体,这通常是默认字体。 我这样做是为了增加字体大小

public MyTextArea(){
    Font currentFont = super.getFont();
    String fontName = currentFont.getFontName();
    int fontStyle = currentFont.getStyle();
    int fontSize = currentFont.getSize() + 4;
    super.setFont(new Font(fontName, fontStyle, fontSize));
}

我目前正在使用此选项获取默认字体,尽管我不希望使用图形对象来获取它:

        private final Font getFont()
            {
                Graphics g = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB).getGraphics();
                Font font = new Font(g.getFont().toString(), 0, 12);
                g.dispose();

                return font;
            }
看看这里。当decode方法接收到一个空指针作为参数时,它返回“Dialog”字体,通常是系统字体

试试这个:

private final Font FONT = new JLabel().getFont();

JavaFX使这变得容易得多:

然后使用:

Font-defaultFont=Font.getDefault();

在Windows中,Segoe用户界面

访问以查看预装字体列表


我选择了Verdana

+1另请参见。关于故障转移的主题,
Font.canDisplayUpTo
对于测试特定字符是否有效非常有用-例如,您使用的是CJK语言字体,需要支持这些语言的回退选项。这不是问题的主题:
font currentFont=super.getFont();如果(currentFont!=null)super.setFont(currentFont.deriveFont(currentFont.getSize2D()+4))新字体(Font.decode(null).getName(),Font.BOLD,14/*size*/);很好用,谢谢有没有办法在Swing中做到这一点?@CardinalSystem我建议使用这个JavaFX
Font
的名称、大小和重量来创建Swing
Font
。如果你不喜欢这样的味道,那么我认为救赎的答案是适合你的:
.getDefault()
为我返回
System
,所以这对我来说并没有什么帮助。获得/real/font系列的任何技巧?@mazunki how lol?如果您没有使用正确的字体类,那么您需要显示从何处导入“字体”对象,而不是说这个答案是无用的,因为它实际上与OP所说的完全相同。在您的情况下,我们可以帮助您找出它返回其他内容的原因。
import javafx.scene.text.Font;
// Where 14 is the font size
Font defaultFont = new Font(14);