为什么GraphicsEnvironment的getAllFonts()方法返回不同于fc-list的字体(在linux上)?
fc-list返回:
Abyssinica SIL:style=Regular Cantarell:style=Bold Cantarell:style=Regular Century Schoolbook L:style=Bold Century Schoolbook L:style=Bold Italic Century Schoolbook L:style=Italic Century Schoolbook L:style=Roman Courier:style=Regular DejaVu Sans,DejaVu Sans Condensed:style=Condensed Bold,Bold DejaVu Sans,DejaVu Sans Condensed:style=Condensed Bold Oblique,Bold Oblique DejaVu Sans,DejaVu Sans Condensed:style=Condensed,Book DejaVu Sans,DejaVu Sans Condensed:style=Condensed Oblique,Oblique DejaVu Sans,DejaVu Sans Light:style=ExtraLight DejaVu Sans Mono:style=Bold DejaVu Sans Mono:style=Bold Oblique DejaVu Sans Mono:style=Book DejaVu Sans Mono:style=Oblique DejaVu Sans:style=Bold DejaVu Sans:style=Bold Oblique DejaVu Sans:style=Book DejaVu Sans:style=Oblique DejaVu Serif,DejaVu Serif Condensed:style=Condensed Bold,Bold DejaVu Serif,DejaVu Serif Condensed:style=Condensed Bold Italic,Bold Italic DejaVu Serif,DejaVu Serif Condensed:style=Condensed,Book DejaVu Serif,DejaVu Serif Condensed:style=Condensed Italic,Italic DejaVu Serif:style=Bold DejaVu Serif:style=Bold Italic DejaVu Serif:style=Book DejaVu Serif:style=Italic Dingbats:style=Regular ...
而
GraphicsEnvironment中的getAllFonts返回:
AbyssinicaSIL CenturySchL-Bold CenturySchL-BoldItal CenturySchL-Ital CenturySchL-Roma DejaVuSans DejaVuSans-Bold DejaVuSans-BoldOblique DejaVuSansCondensed DejaVuSansCondensed-Bold DejaVuSansCondensed-BoldOblique DejaVuSansCondensed-Oblique DejaVuSans-ExtraLight DejaVuSansMono DejaVuSansMono-Bold DejaVuSansMono-BoldOblique DejaVuSansMono-Oblique DejaVuSans-Oblique DejaVuSerif DejaVuSerif-Bold DejaVuSerif-BoldItalic DejaVuSerifCondensed DejaVuSerifCondensed-Bold DejaVuSerifCondensed-BoldItalic DejaVuSerifCondensed-Italic DejaVuSerif-Italic Dialog.bold Dialog.bolditalic Dialog.italic Dialog.plain DialogInput.bold DialogInput.bolditalic DialogInput.italic DialogInput.plain Dingbats ...
比较这两个不同的列表,教授列表中的字体不可用于其他字体。
任何人都可以解释发生了什么事?
进一步说明:
我之所以问这个问题的原因是,我试图找出一些在一个操作系统(例如Solaris)上定义的字体与另一个(例如Linux)上的字体不同的UI问题。
我认为问题是,虽然两个操作系统具有相同的逻辑字体(对话框),他们不一定有相同的物理字体。
但是,如果你做一个字体如:
Font STANDARD_FONT = new Font("Dialog", 0, 12);
不能保证到处都是一样的。
我希望我可以看看两个系统上可用的字体,并通过fc-list查看哪些字体可用,但java(Dialog.plain)报告的字体不是根据fc-list列出的字体。
所以,如果我通过新的Font(“Dialog”,0,12)定义一个逻辑字体,那么通过java(例如font.getName()等)可用的API显示:
postscript – Dialog.plain系列 – 对话框名称 – 对话框字体名称 – Dialog.plain大小 – 12
我怎样才能确切地知道什么物理字体javaselect使用的对话框家庭?
在getAllFonts()
中专门存在的字体系列不是物理字体,这意味着它们不是计算机上的字体文件,所以fc-list
没有找到它们。 它们是每个Java实现中常见的字体系列,并映射到物理字体。
逻辑字体是由Java平台定义的五种字体系列,必须由任何Java运行时环境支持:Serif,SansSerif,Monospaced,Dialog和DialogInput。 这些逻辑字体不是实际的字体库。 相反,逻辑字体名称由Java运行时环境映射到物理字体。
至于fc-list
专用的字体系列,它们很可能是您的系统上正在运行的Java实施不支持的物理字体。 Java实现需要支持的唯一字体类型是TrueType; fc-list
专用的字体可能不是TrueType。
Java平台的所有实现都必须支持TrueType字体; 对其他字体技术的支持依赖于实现。
来源: Java的Font
API文档 。