为什么GraphicsEnvironment的getAllFonts()方法返回不同的字体
比FC列表(在Linux上?)
FC列表返回:
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问题,其中一个os(例如solaris)上定义的字体与另一个os(例如linux)上定义的字体不同。
我认为问题在于,虽然两个操作系统的逻辑字体(对话框)相同,
它们不一定具有相同的物理字体。
但是如果你用这样的字体:
Font STANDARD_FONT = new Font("Dialog", 0, 12);
并不能保证每个地方都是一样的。
我希望可以查看两个系统上可用的字体,并通过fc list查看哪些字体可用,但是java(dialog.plain)报告的字体不是fc list列出的字体。
所以,如果我通过新字体(“dialog”,0,12)定义一个逻辑字体,
通过Java提供的API(例如Font.getName()等)显示:
Postscript-对话框.plain
族-对话框
名称-对话框
字体名-dialog.plain
尺寸-12
我如何才能确切地知道java选择了哪些物理字体用于dialog系列?
最佳答案
getAllFonts()
中唯一存在的字体系列不是物理字体,这意味着它们不是您计算机上的字体文件,因此fc-list
找不到它们。它们是每个java实现中常见的字体系列,并映射到物理字体。
逻辑字体是由Java平台定义的五种字体系列,任何Java运行时环境都必须支持它们:serif、sansserif、monospaced、dialog和dialoginput。这些逻辑字体不是实际的字体库。相反,Java运行时环境将逻辑字体名称映射到物理字体。
至于fc-list
独有的字体系列,它们很可能是系统上运行的java实现不支持的物理字体。Java实现需要支持的唯一字体类型是TrueType;fc-list
专用的字体可能不是TrueType。
Java平台的所有实现都必须支持TrueType字体;对其他字体技术的支持取决于实现。
资料来源:Java's Font
API documentation。
关于java - 为什么GraphicsEnvironment的getAllFonts()返回的字体与fc-list不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15329880/