How to find, with Java, if a certain font is installed correctly on a machine
I have a PC notebook running Win Vista, when I first bought it, certain Chinese fonts won't show up, I could only see rectangles, but I 开发者_如何学JAVAplayed with the control setting for a while, changed some properties, and now it shows Chinese fonts correctly, but I don't remember what I did.
Now some of my programs displays both English and Chinese, something like this : "Enter | 输入" (The Chinese here also means enter), but if a user doesn't have Chinese fonts installed properly on his machine, he will see something like this : "Enter | [][]", my question is : in Java how to detect if those characters will show up correctly on a certain machine, if not, just display "Enter", if it is, show "Enter | 输入".
Frank
java.awt.GraphicsEnvironment.getAvailableFontFamilyNames()
can give you a list of the available fonts installed on the current system. You could also use java.awt.GraphicsEnvironment.getAllFonts()
to get java.awt.Font
objects.
Then, you can use java.awt.Font.canDisplay(int)
to check whether a Unicode character can be displayed in that font (where the int
is the integer representation of the multibyte character).
Lazy version:
Arrays.asList(GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames()).contains(FONT_NAME)
For those who are still interested. Performance tip: using getAvailableFontFamilyNames(Locale.ROOT)
might be significantly faster than just getAvailableFontFamilyNames()
because in the latter case locale-aware processing is performed.
精彩评论