我有一个在Windows XP中开发的Java 7 Swing应用程序。 我使用跨平台的外观和感觉:
UIManager.setLookAndFeel(UIManager.getCrossplatformlookAndFeelClassName());
当我在Linux上运行它(Fedora 12)。 字体稍宽一些。 所以布局在一些地方因此而改变。
有没有办法让应用程序使用相同的字体或相似的字体,而不是本地系统? 那么我们可以使它的外观和感觉真的一样。
谢谢,
使Windows上的字体呈现像Mac / Linux:禁用字体提示和/或在客户端处理反别名
安装字体并使Windows知道
如何使Perl Tk :: Frame看起来像一个LCD?
Chrome 10 / Windows @ font-face编码的麻烦
如何获得GNU Unifont或Free Mono在gvim windows上的工作?
如何更改PyScripter中的字体(大小/家庭)?
为什么@ font-face在Windows中渲染怪异?
在CSS中使用@ font-face的Windows字体呈现问题
我可以在我的Windows应用程序中embedded几乎任何字体,只要在应用程序执行期间安装它?
如何使用免费的linux命令行工具将字体embedded到PDF中?
你可以看看UIManager 。 Swing使用此处的属性(如Label.font )来获取默认字体。 所以你可以这样做:
Font font = // create font UIManager.put("Label.font",font)
确保在创建任何组件之前对其进行更改,否则会得到一些正确的字体,而其他字体却没有。 这是一个程序 ,它将向您显示UIManager的默认属性。 任何以.font结尾的.font都是你要找的东西。
另一种方法是创建一个实用程序类,它将使用您自己的默认值创建组件:
public class MyComponents { public static final Font LABEL_FONT = // create font public static JLabel createLabel(String text) { JLabel label = new JLabel(text); label.setFont(LABEL_FONT); return label; } }
如果这是一个没有太多组件的新应用,我推荐第二种方法。 如果这是一个有大量组件生成的旧应用程序,那么第一种方法将会更省时,但第二种方法可能会更好。
这可能行不通,但是。 您可以提供自己的字体,与应用程序捆绑在一起,并在运行时加载。
查看JAR文件的加载字体,并创建AWT字体(工程)和注册iText字体(不起作用)为例(答案不是很对,但意图是好的)或http://www.java2s。 COM /代码/ Java的/ 2D图形的GUI / Loadfontfromttffile.htm
一旦加载,你可以走UIManager的属性,用“.font”替换所有的字符。
你最终要面对的问题是操作系统的渲染引擎的差异,包括像DPI和字体渲染引擎的差异。
目前尚不清楚这是字体问题还是布局问题。 当然, sscce会帮助说明你认为是什么问题。 相比之下,此示例说明了布局如何调整以适应不同平台上的默认字体系列。
当您使用跨平台的L&F时 ,您可能需要关闭粗体字体,如下所示。 一些平台并不使用实际的粗体字体,而是从普通的字体中获得大胆的风格,而这些字体通常是混合的结果。