为什么相同的字体在 Netbeans 的 Java 应用程序 运行 和 Jar 的 运行 中看起来不同?

Why the same font looks different in Java app run from Netbeans and run from Jar?

在我的 Java Swing 应用程序中,我有一些 JTextAreas,我意识到当它来自 Netbeans 运行 和来自 Jar 文件的应用程序 运行 时,文本看起来不同,为什么?如何让它们看起来一样?

JTextArea Client_Side_TextArea=new JTextArea(),Network_TextArea=new JTextArea();

setLayout(new BorderLayout());

Client_Side_TextArea.setFont(new Font("Monospaced",0,15));
Client_Side_TextArea.setForeground(new Color(0,28,218));
Client_Side_TextArea.setPreferredSize(new Dimension(290,300));
Client_Side_TextArea.append("           Client Side\n================================\n");
add("West",Client_Side_TextArea);

Network_TextArea.setFont(new Font("Monospaced",0,15));
Network_TextArea.setBackground(new Color(226,226,226));
Network_TextArea.setForeground(new Color(0,28,218));
Network_TextArea.setPreferredSize(new Dimension(270,300));
Network_TextArea.append("            Network Connection\n =========================================\n");
add("Center",Network_TextArea);

在下图中,上半部分来自带有 Netbeans 的应用 运行,下半部分是来自 Jar 文件 运行 时的样子:

这是预期的行为:如 Font API, each supported platform may map a different physical font to a particulate logical font such as Font.MONOSPACED. Each look & feel may further refine the choice of font for a particular purpose. Unless the platforms, versions and settings are identical, the fonts may vary. A complete example and more on the mapping may be found here 中所述。

此外,由于引用的原因here, don't use setPreferredSize(). If you choose to override getPreferredSize(), be certain not to fall into this trap