为什么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
...
比较这两个不同的列表,教学列表中的字体不可用。
有人可以解释发生了什么吗?
进一步说明:
我首先提出这个问题的原因是,我试图找出一些UI问题,其中在一个操作系统(例如Solaris)上定义的字体与另一个操作系统上定义的字体不同(例如Linux)。
我认为问题是虽然两个操作系统都具有相同的逻辑字体(Dialog), 它们不一定具有相同的物理字体。
但是如果你制作的字体如下:
Font STANDARD_FONT = new Font("Dialog", 0, 12);
不能保证在任何地方都一样。
我希望我能查看两个系统上可用的字体并查看哪些字体可通过fc-list获得,但java(Dialog.plain)报告的字体不是fc-list列出的字体。
因此,如果我通过新字体定义逻辑字体(" Dialog",0,12), 通过java提供的API(例如font.getName()等)显示:
postscript - Dialog.plain 家庭 - 对话 名称 - 对话 fontName - Dialog.plain 大小 - 12
如何准确判断java选择用于Dialog系列的物理字体?
答案 0 :(得分:1)
getAllFonts()
中专门提供的字体系列不是物理字体,这意味着它们不是您计算机上的字体文件,因此fc-list
无法找到它们。它们是每个Java实现中常见的字体系列,并映射到物理字体。
逻辑字体是Java平台定义的五个字体系列,任何Java运行时环境都必须支持这些字体系列:Serif,SansSerif,Monospaced,Dialog和DialogInput。这些逻辑字体不是实际的字体库。而是由Java运行时环境将逻辑字体名称映射到物理字体。
对于fc-list
独有的字体系列,它们很可能是系统中您正在运行的Java实现不支持的物理字体。 Java实现需要支持的唯一字体类型是TrueType; fc-list
独有的字体可能不是TrueType。
Java平台的所有实现都必须支持TrueType字体;对其他字体技术的支持取决于实现。