为什么我们在Web浏览器和Java swing中没有获得相同字体的相同显示

时间:2015-07-04 16:34:37

标签: java swing unicode fonts

假设一个字体Kalpurush.ttf(你可能会发现这个字体here)。因为它是一个阿萨姆语字体,可能没有安装在每个人的计算机上,所以,我已经在我的网站中嵌入了这个字体。它在任何浏览器中都可以正常显示(除了android webview。我对android没有任何头痛)。事实上,我从未发现任何阿萨姆语字体如此美妙。

现在我在Java Swing应用程序中尝试过相同的字体。我写过这堂课:

public class AssameseFont {
public AssameseFont(){}

public Font Assamese(){
  File file = new File("kalpurush.ttf");
  Font as = null;
  try{          
   FileInputStream input = new FileInputStream(file);
   as = Font.createFont(Font.TRUETYPE_FONT, file);
   as = as.deriveFont(Font.PLAIN, 18);       
   GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(as);

  }
  catch(FontFormatException | IOException e){
  JOptionPane.showMessageDialog(null, ""+e);
  }
 return as;    
}    
}

我用setFont()方法在我的组件中调用它。

但是我的一些文字并没有显示出来。 为什么会这样?这是字体问题吗?或者我在java代码中做错了什么?

1 个答案:

答案 0 :(得分:2)

  

因为它是一个阿萨姆语字体,可能没有安装在每个人的计算机上,所以,我已经在我的网站中嵌入了这个字体。 ..

File file = new File("kalpurush.ttf");

该文件将指向 用户的 计算机上的(不存在的)文件。

必须由URL访问字体。

另见Setting custom font

链接线程上看到的代码,但带有kalpurush.ttf字体。

enter image description here

import java.awt.*;
import javax.swing.*;
import java.net.URL;

class DisplayFont {
    public static void main(String[] args) throws Exception {
        URL fontUrl = new URL("http://assameseonline.com/css/kalpurush.ttf");
        Font font = Font.createFont(Font.TRUETYPE_FONT, fontUrl.openStream());
        font = font.deriveFont(Font.PLAIN,20);
        GraphicsEnvironment ge =
            GraphicsEnvironment.getLocalGraphicsEnvironment();
        ge.registerFont(font);

        JLabel l = new JLabel(
            "The quick brown fox jumps over the lazy dog. 0123456789");
        l.setFont(font);
        JOptionPane.showMessageDialog(null, l);
    }
}