当前位置:  开发笔记 > 编程语言 > 正文

SWT - OS获取等宽字体的不可知方式

如何解决《SWT-OS获取等宽字体的不可知方式》经验,为你挑选了2个好方法。

SWT中是否有一种方法可以简单地获得等宽字体,适用于各种操作系统?

例如.这适用于Linux,但不适用于Windows:


Font mono = new Font(parent.getDisplay(), "Mono", 10, SWT.NONE);

或者我需要一个尝试加载不同字体(Consolas,Terminal,Monaco,Mono)的方法,直到一个不为空?或者,我可以在启动时在属性文件中指定它.

我尝试从Display获取系统字体,但这不是等宽的.



1> Bartleby..:

我花了一些时间来反对这个,直到我意识到显然eclipse必须能够访问monospace字体,以便在其文本字段,控制台等中使用.一点点挖掘出现了:

Font terminalFont = JFaceResources.getFont(JFaceResources.TEXT_FONT);

如果您感兴趣的是获取一些等宽字体,哪个有效.

编辑:或根据@ ctron的评论:

Font font = JFaceResources.getTextFont();

编辑:警告(基于@ Lii的评论):这将为您提供配置的文本字体,可以由用户覆盖,也可以不是等宽字体.但是,它将与编辑器和控制台中使用的字体一致,这可能是您想要的.


**这不一定是等宽字体.**例如,在Eclipse应用程序中,它将是用户在*Preferences> General> Colors and Fonts> Basic> Text Font*中配置的任何字体.它与Eclipse中的基本文本编辑器使用的字体相同.当然,几乎所有用户都会使用等宽字体,但您无法确定.

2> fhe..:

根据国际化支持相关API 的JDK文档中的字体配置文件部分,逻辑字体的概念用于定义某些与平台无关的字体​​,这些字体映射到默认字体配置文件中的物理字体:

Java平台定义了每个实现必须支持的五个逻辑字体名称:Serif,SansSerif,Monospaced,Dialog和DialogInput.这些逻辑字体名称以依赖于实现的方式映射到物理字体.

所以在你的情况下,我会尝试

Font mono = new Font(parent.getDisplay(), "Monospaced", 10, SWT.NONE);

获取运行代码的当前平台的物理等宽字体的句柄.

编辑:似乎SWT对逻辑字体一无所知(eclipse.org上的错误48055详细描述了这一点).在这个错误报告中,建议使用hackish解决方法,其中可以从AWT字体检索物理字体的名称...


这也应该以java.awt.Font.MONOSPACED的形式提供
推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有