如何使Java Swing Application在Windows和Linux中具有一致的字体?

我有一个在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时 ,您可能需要关闭粗体字体,如下所示。 一些平台并不使用实际的粗体字体,而是从普通的字体中获得大胆的风格,而这些字体通常是混合的结果。

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....