SWT中是否有一种方法可以简单地获得等宽字体,适用于各种操作系统?
例如.这适用于Linux,但不适用于Windows:
Font mono = new Font(parent.getDisplay(), "Mono", 10, SWT.NONE);
或者我需要一个尝试加载不同字体(Consolas,Terminal,Monaco,Mono)的方法,直到一个不为空?或者,我可以在启动时在属性文件中指定它.
我尝试从Display获取系统字体,但这不是等宽的.
我花了一些时间来反对这个,直到我意识到显然eclipse必须能够访问monospace字体,以便在其文本字段,控制台等中使用.一点点挖掘出现了:
Font terminalFont = JFaceResources.getFont(JFaceResources.TEXT_FONT);
如果您感兴趣的是获取一些等宽字体,哪个有效.
编辑:或根据@ ctron的评论:
Font font = JFaceResources.getTextFont();
编辑:警告(基于@ Lii的评论):这将为您提供配置的文本字体,可以由用户覆盖,也可以不是等宽字体.但是,它将与编辑器和控制台中使用的字体一致,这可能是您想要的.
根据国际化支持相关API 的JDK文档中的字体配置文件部分,逻辑字体的概念用于定义某些与平台无关的字体,这些字体映射到默认字体配置文件中的物理字体:
Java平台定义了每个实现必须支持的五个逻辑字体名称:Serif,SansSerif,Monospaced,Dialog和DialogInput.这些逻辑字体名称以依赖于实现的方式映射到物理字体.
所以在你的情况下,我会尝试
Font mono = new Font(parent.getDisplay(), "Monospaced", 10, SWT.NONE);
获取运行代码的当前平台的物理等宽字体的句柄.
编辑:似乎SWT对逻辑字体一无所知(eclipse.org上的错误48055详细描述了这一点).在这个错误报告中,建议使用hackish解决方法,其中可以从AWT字体检索物理字体的名称...