【问题标题】:How to locate the fonts being used by my Java Swing app on the system?如何在系统上找到我的 Java Swing 应用程序正在使用的字体?
【发布时间】:2016-04-26 02:13:13
【问题描述】:

我注意到当我从 Netbeans 运行我的 Java Swing 应用程序时,当我在 Windows 7 上从我的 C: 驱动器将它作为 jar 文件运行时,字体看起来不同。

有人告诉我,jar 应用程序中使用的字体来自系统,因此在从 Netbeans 运行时它们看起来与字体不同,因此为了使我的应用程序从我的 IDE 和用户的角度来看保持一致,如何定位字体从 Netbeans 加载到我的应用程序中,这样我就可以将它们复制到我的应用程序中并将它们打包为我的 jar 应用程序的一部分,这可行吗?如果是这样,在我将它们复制到我的应用程序后,如何将它们加载到我的应用程序中?

这里是代码和图片:

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;

public class Test_JPanel extends JPanel
{
  public static final long serialVersionUID=26362862L;
  static Dimension Screen_Size=Toolkit.getDefaultToolkit().getScreenSize();
  Thread Empty_JPanel_Thread;

  public Test_JPanel()
  {
    setPreferredSize(new Dimension(300,600));
    String Table="<Html>\n"+
                 "  <Center><Br>\n"
                 +"Test Table<P>\n"
                 +"    <Table Border=0 Cellpadding=1 Cellspacing=1 Width=286>\n"
                 +"      <Tr><Td Width=118 Align=Right>[ 1]&nbsp;&nbsp;</Td><Td>111 - AAA</Td><Td></Td></Tr>\n"
                 +"      <Tr><Td Width=118 Align=Right>[ 2]&nbsp;&nbsp;</Td><Td>222 - BBB</Td><Td></Td></Tr>\n"
                 +"      <Tr><Td Width=118 Align=Right>[ 3]&nbsp;&nbsp;</Td><Td>333 - CCC</Td><Td></Td></Tr>\n"
                 +"      <Tr><Td Width=118 Align=Right>[ 4]&nbsp;&nbsp;</Td><Td>444 - DDD</Td><Td></Td></Tr>\n"
                 +"      <Tr><Td Width=118 Align=Right>[ 5]&nbsp;&nbsp;</Td><Td>555 - EEE</Td><Td></Td></Tr>\n"
                 +"      <Tr><Td Width=118 Align=Right>[ 6]&nbsp;&nbsp;</Td><Td>666 - FFF</Td><Td></Td></Tr>\n"
                 +"      <Tr><Td Width=118 Align=Right>[ 7]&nbsp;&nbsp;</Td><Td>777 - GGG</Td><Td></Td></Tr>\n"
                 +"      <Tr><Td Width=118 Align=Right>[ 8]&nbsp;&nbsp;</Td><Td>888 - HHH</Td><Td></Td></Tr>\n"
                 +"      <Tr><Td Width=118 Align=Right>[ 9]&nbsp;&nbsp;</Td><Td>999 - III</Td><Td></Td></Tr>\n"
                 +"      <Tr><Td Width=118 Align=Right>[10]&nbsp;&nbsp;</Td><Td>000 - JJJ</Td><Td></Td></Tr>\n"
                 +"    </Table>\n"
                 +"  </Center>\n"
                 +"<Hr Width=100%>\n"
                 +"</Html>";
    JLabel aLabel=new JLabel(Table);
    aLabel.setFont(new Font("Dialog",0,18));
    aLabel.setOpaque(true);
    aLabel.setPreferredSize(new Dimension(285,413));
    add(aLabel);

  }

  static void Create_And_Show_GUI()
  {
    final Test_JPanel demo=new Test_JPanel();

    JFrame frame=new JFrame("Test_JPanel");
    frame.add(demo);
    frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e)  { System.exit(0); } });
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }

  public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { Create_And_Show_GUI(); } }); }
}

【问题讨论】:

  • “我被告知 jars 应用程序中使用的字体来自系统,因此它们看起来与从 Netbeans 运行时的字体不同” 据我所知,所有 Java 字体从本地系统加载。两种表示之间最可能的区别是 PLAF - 它通常会选择不同的字体或不同的字体呈现方式(例如抗锯齿)。如需尽快获得更好的帮助,请发布minimal reproducible exampleShort, Self Contained, Correct Example。顺便说一句,您在基本调试中发现了哪些字体?向 MCVE 添加代码以列出字体信息。
  • 一个 Java 运行时 (JRE) 可以contain any of three families of the Lucida font,除了属于主机操作系统的字体。
  • 你为什么在乎?使用布局管理器和逻辑字体系列,见 here

标签: java swing fonts jar


【解决方案1】:

这不是我在问题中寻找的答案,但这是解决问题的答案。我发现问题不是字体差异,而是html表格间距,我在Jar中运行时将“Cellpadding = 1”替换为“Cellpadding = 0”,修复了问题。

所以我的应用首先检测它是从 IDE 运行还是从 Jar 运行,从 IDE 运行时 Cellpadding=1 ,从 Jar 运行时 Cellpadding=0 ,这将使应用在 2 种情况下看起来相同。

我希望这可以从 Java 端而不是我的应用程序解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2010-11-18
    • 2018-10-21
    相关资源
    最近更新 更多