Dat*_*aki 3 java fonts swing load classloader
此问题的后续问题: Swing 字体名称不匹配?(制作字体选择器,并尝试在 JComboBox 中显示默认系统字体)
看来有逻辑字体和物理字体。逻辑字体有:Serif、SansSerif、Monospaced、Dialog 和 DialogInput。
这些字体是动态的,它们各自的物理字体(它们在程序执行期间表示的字体)是在程序加载时决定的。
我需要访问这些逻辑字体的物理字体。
我的第一个想法是尝试加载这些文件: http://download.oracle.com/javase/6/docs/technotes/guides/intl/fontconfig.html#loading
通过使用这样的东西: http ://www.rgagnon.com/javadetails/java-0434.html
public static Properties load(String propsName) throws Exception {
Properties props = new Properties();
URL url = ClassLoader.getSystemResource(propsName);
props.load(url.openStream());
return props;
}
Run Code Online (Sandbox Code Playgroud)
然后从这些属性文件中获取物理字体。
但是,当我尝试使用第一个文件中的名称加载属性时,我刚刚收到 NullPointerExceptions(未找到它们,但我已检查并实际上在我的系统上找到了它们)。我不知道为什么我会得到这个,但无论如何,我不禁想一定有一种更简单的方法来做到这一点?
public static Font getPhysicalFont(Font logicalFont) {
for (int i=0; i<FontManager.getRegisteredFonts().length; i++) {
Font2D font = FontManager.getRegisteredFonts()[i];
if (font instanceof CompositeFont && font.getFontName(Locale.getDefault()).equals(logicalFont.getFontName())) {
PhysicalFont physicalFont = ((CompositeFont) font).getSlotFont(0);
return new Font(physicalFont.getFamilyName(Locale.getDefault()), physicalFont.getStyle(), logicalFont.getSize());
}
}
return logicalFont;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2060 次 |
最近记录: |