【发布时间】: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] </Td><Td>111 - AAA</Td><Td></Td></Tr>\n"
+" <Tr><Td Width=118 Align=Right>[ 2] </Td><Td>222 - BBB</Td><Td></Td></Tr>\n"
+" <Tr><Td Width=118 Align=Right>[ 3] </Td><Td>333 - CCC</Td><Td></Td></Tr>\n"
+" <Tr><Td Width=118 Align=Right>[ 4] </Td><Td>444 - DDD</Td><Td></Td></Tr>\n"
+" <Tr><Td Width=118 Align=Right>[ 5] </Td><Td>555 - EEE</Td><Td></Td></Tr>\n"
+" <Tr><Td Width=118 Align=Right>[ 6] </Td><Td>666 - FFF</Td><Td></Td></Tr>\n"
+" <Tr><Td Width=118 Align=Right>[ 7] </Td><Td>777 - GGG</Td><Td></Td></Tr>\n"
+" <Tr><Td Width=118 Align=Right>[ 8] </Td><Td>888 - HHH</Td><Td></Td></Tr>\n"
+" <Tr><Td Width=118 Align=Right>[ 9] </Td><Td>999 - III</Td><Td></Td></Tr>\n"
+" <Tr><Td Width=118 Align=Right>[10] </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 example 或Short, Self Contained, Correct Example。顺便说一句,您在基本调试中发现了哪些字体?向 MCVE 添加代码以列出字体信息。
-
一个 Java 运行时 (JRE) 可以contain any of three families of the Lucida font,除了属于主机操作系统的字体。
-
你为什么在乎?使用布局管理器和逻辑字体系列,见 here。