这个问题网上已有很多答案,有些还给出了终极的程序来说明,但大都没有将这个问题的几个方面连接起来。因此,写出此文章,想补充其不足,希望能对初学者有一定帮助。
1. java的界面开发一般都是用awt, swing来实现
示例代码(ButtonExample.java):
import javax.swing.*;
public class ButtonExample extends JPanel {
JFrame myframe;
ButtonExample() {
myframe=new JFrame("欢迎进入Java世界");
myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myframe.add(this);
JButton ok= new JButton("确定");
add(ok);
myframe.setSize(300, 150);
myframe.setResizable(false);
myframe.setVisible(true);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ButtonExample myButton = new ButtonExample();
}
}
运行此程序后,中文没有正确显示,如下:
注: 主窗口标题显示正确,但内容中文显示不正常(按钮的中文显示为方框)
2. 上述问题是开发所用的JDK没有正确支持中文字体的原因,网上有一种方法是从windows端拷贝字体,其实目前主流的linux系统都自带有中文字体,可以运行下列程序验证(CheckFonts.java):
import java.awt.*;
import java.io.*;
import java.awt.event.*;
public class CheckFonts {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
java.awt.GraphicsEnvironment eq = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
String[] fontNames = eq.getAvailableFontFamilyNames();
for(int i=0;i<fontNames.length;i++){
System.out.println(fontNames[i]);
}
}
}
输出示例如下:
文泉驿微米黑
文泉驿正黑
文泉驿点阵正黑
文泉驿等宽微米黑
文泉驿等宽正黑
3. 因此,最初示例程序中通过UIManager类添加字体设置代码,验证通过
(ButtonExample.java)
import java.awt.Color;
import java.awt.Font;
import javax.swing.*;
public class ButtonExample extends JPanel {
JFrame myframe;
ButtonExample() {
myframe = new JFrame("欢迎进入Java世界");
myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myframe.add(this);
JButton ok = new JButton("确定");
add(ok);
myframe.setSize(300, 150);
myframe.setResizable(false);
myframe.setVisible(true);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Font f = new Font("文泉驿正黑", Font.PLAIN, 12);
UIManager.put("Label.font", f);
UIManager.put("Label.foreground", Color.black);
UIManager.put("Button.font", f);
UIManager.put("Menu.font", f);
UIManager.put("MenuItem.font", f);
UIManager.put("List.font", f);
UIManager.put("CheckBox.font", f);
UIManager.put("RadioButton.font", f);
UIManager.put("ComboBox.font", f);
UIManager.put("TextArea.font", f);
UIManager.put("EditorPane.font", f);
UIManager.put("ScrollPane.font", f);
UIManager.put("ToolTip.font", f);
UIManager.put("TextField.font", f);
UIManager.put("TableHeader.font", f);
UIManager.put("Table.font", f);
ButtonExample myButton = new ButtonExample();
}
}
4. 此示例基于debian wheezy/Eclipse Platform3.8.0验证,其他平台及环境请自行验证。引用网页如下:
/>
/>